为std :: function键入别名

时间:2015-12-06 15:54:00

标签: c++ function c++11 type-alias

我尝试将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|

2 个答案:

答案 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;
}