Модернизация Typedef для функции для функции std ::C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Модернизация Typedef для функции для функции std ::

Сообщение Anonymous »

У меня есть устаревший код, который использует Typedef для указателей функций (и да, void* также). Я уменьшил это до этого: < /p>
#include
#include
typedef void (*funx_t)(const double *, void *);
void function(funx_t fp)
{
auto x = std::make_unique();
fp(x.get(), x.get());
}

void overloaded(const double *, void *) {}
void overloaded(double) {}
int main()
{
function(overloaded);
}
< /code>
Этот код компилирует [Godbolt]. Теперь я хотел изменить объявление указателя функции на более современную версию, которая также позволила бы Lambdas (кроме того, что он более читабелен IMHO): < /p>
using funx_t = std::function;
< /code>
Но это больше не компилируется [Godbolt]. < /p>
Сообщение об ошибке < /p>
:13:5: error: no matching function for call to 'function'
13 | function(overloaded);
| ^~~~~~~~
:3:6: note: candidate function not viable: no overload of 'overloaded' matching 'funx_t' (aka 'function') for 1st argument
3 | void function(funx_t fp)
| ^ ~~~~~~~~~
< /code>
Кажется, что я еще не получил, когда дело доходит до этих указателей функций. Почему я думал, что это должно сработать, когда на самом деле это не так? Могу ли я как -то исправить это и собрать с помощью более современной функции Std ::


Подробнее здесь: https://stackoverflow.com/questions/797 ... tdfunction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»