是否可以使用functor作为std :: function的模板参数?

时间:2017-03-15 14:18:43

标签: c++ linux windows c++11 porting

我试图找到用于编译此示例c ++代码的g ++编译器参数:

#include <stdio.h>
#include <functional>

struct mystruct
{
    int a;
    int operator()(int y) { return y + 1; }
};

int main()
{
    std::function<mystruct> foo;
    return 0;
}

在cpp中,写入了std :: function模板参数可以是&#34; ...或其他函数对象&#34;。我在包含几个std :: function的大型项目上工作,而项目可以用g ++构建。我正在尝试在VS2015下构建它,但是这些代码上的编译器抱怨:

错误C2027:使用未定义的类型&#39; std :: _ Get_function_impl&lt; _Fty&gt;&#39;           同           [               _Fty = MYSTRUCT           ]

当我尝试使用-std = c ++ 11在g ++下编译上面的小样本时,它也会抱怨:

错误:聚合&#39; std :: function a&#39;具有不完整的类型,无法定义

所以我认为在我们的大型可构建项目中,g ++可能已经切换了一些提供这种功能的扩展。

2 个答案:

答案 0 :(得分:3)

可能你将模板参数与要存储的函数对象混淆了。我相信你想写的是

std::function<int(int)> foo{mystruct{}};

答案 1 :(得分:0)

答案是仿函数不能成为其他仿函数的模板参数。感谢所有帖子。