我尝试将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|
答案 0 :(得分:6)
template <typename F>
using MyFunc = std::function<F>;
void(int)
是单一(函数)类型。
答案 1 :(得分:3)
即使接受的回答是正确的,但就OP发布的回复提出了一种稍微不同的方法。
为了清楚起见,必须说OP也使用的解决方案也很好
问题是他在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;
}