我试图找到使用什么G ++编译器参数编译此示例C++代码:是否可以使用functor作为std :: function的模板参数?
#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 ::函数模板参数可以是“...或其他函数对象” 。我从事包含多个std :: function的大型项目,并且可以使用g ++构建项目。我试图建立它在VS2015,但是编译器在此类代码抱怨:
错误C2027:使用未定义的类型 '的std :: _ Get_function_impl < _Fty>' 与 [ _Fty = MYSTRUCT ]
时我试图编译上述小样本下克++与-std = C++ 11也comlains:
错误:骨料'的std ::功能的具有不完整的类型和不能被定义
因此,我认为在我们的大可建立的项目g ++可能已经切换了一些提供这种能力的扩展。
你认为模板参数可以是除函数类型以外的任何东西(例如'int(double,char)')? cppreference说它可以存储函数对象。无论如何,如果'mystruct'有多个'operator()'重载,或者operator()'是模板化的,它会怎么做?它不能安全地键入 - 擦除呼叫签名。 – chris