Я пытаюсь псевдоним 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|
template <typename F>
using MyFunc = std::function<F>;
void(int)
является единственным (функциональным) типом.
Несмотря на то, что принятый ответ является правильным, он предлагает несколько иной подход в отношении того, который опубликовал ФП.
Для ясности следует сказать, что решение, которое использовал ОП, также подходит.
Проблема в том, как он использовал 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;
}