Введите псевдоним для std :: function

Я пытаюсь псевдоним std::function типа, потому что я планирую использовать что-то еще в будущем. И я хотел бы иметь возможность легко сделать это изменение. Но я получаю сообщение об ошибке от компилятора, которое я не совсем понимаю. Я понимаю, что это значит, но я не понимаю этого в этом контексте.

Пример:

#include <functional>

template < typename Ret, typename... Args > using MyFunc = std::function< Ret(Args...) >;

int main(int argc, char **argv)
{
MyFunc<void(int)> fn;

return 0;
}

Формирует:

..\main.cpp|7|required from here|
..\main.cpp|3|error: function returning a function|

1

Решение

template <typename F>
using MyFunc = std::function<F>;

void(int) является единственным (функциональным) типом.

6

Другие решения

Несмотря на то, что принятый ответ является правильным, он предлагает несколько иной подход в отношении того, который опубликовал ФП.

Для ясности следует сказать, что решение, которое использовал ОП, также подходит.
Проблема в том, как он использовал MyFunc введите его main функция.

Это не должно быть:

MyFunc<void(int)> fn;

Вместо этого следующий правильно:

MyFunc<void, int> fn;

Из-за этого приведенный ниже код работает должным образом:

#include <functional>

template < typename Ret, typename... Args >
using MyFunc = std::function< Ret(Args...) >;

int main(int argc, char **argv) {
MyFunc<void, int> fn; // it was MyFunc<void(int)> fn;
return 0;
}
2

По вопросам рекламы [email protected]