我试图找到用于编译此示例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 ++可能已经切换了一些提供这种功能的扩展。
答案 0 :(得分:3)
可能你将模板参数与要存储的函数对象混淆了。我相信你想写的是
std::function<int(int)> foo{mystruct{}};
答案 1 :(得分:0)
答案是仿函数不能成为其他仿函数的模板参数。感谢所有帖子。