2017-03-15 88 views
1

我试图找到使用什么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 ++可能已经切换了一些提供这种能力的扩展。

+2

你认为模板参数可以是除函数类型以外的任何东西(例如'int(double,char)')? cppreference说它可以存储函数对象。无论如何,如果'mystruct'有多个'operator()'重载,或者operator()'是模板化的,它会怎么做?它不能安全地键入 - 擦除呼叫签名。 – chris

回答

3

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

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

答案是仿函数不能是其他仿函数的模板参数。感谢所有职位。

相关问题