有没有办法创建一个vector< mem_fun_t< ReturnType, MyClass > >
?
我看到的错误是:
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
有没有办法创建一个vector< mem_fun_t< ReturnType, MyClass > >
?
我看到的错误是:
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
我真的不明白为什么它不起作用,但它实际上是一个非常丑陋的解决方案。只需接受vector<function<ReturnType(MyClass*)>>
并避免 C++03 活页夹中存在的那些问题。
您当然可以创建这样的向量。
#include <vector>
#include <functional>
#include <iostream>
struct MyClass
{
int a() { return 1; }
int b() { return 2; }
};
int main()
{
std::vector<std::mem_fun_t<int, MyClass> > vec;
vec.push_back(std::mem_fun(&MyClass::a));
vec.push_back(std::mem_fun(&MyClass::b));
MyClass x;
for (size_t i = 0; i != vec.size(); ++i) {
std::cout << vec[i](&x) << '\n';
}
}
如果您遇到问题,请仔细阅读错误消息。例如,std::mem_fun
可以返回各种包装器,具体取决于您传递给它的内容。
或者确实,切换到 boost's 或 C++0x's function
。
编辑:有了这个特定的错误消息,我假设您正在执行一些调用包含类型的默认构造函数的操作(例如resize
,或使用向量的构造函数指定大小)。你不能使用这些功能。
mem_fun_t
满足存储在容器中的要求(它是可复制构造和可分配的),所以答案是肯定的。
但是,它不是默认可构造的或可比较的,所以有些事情你不能用它们的容器来做,包括:
您看到的错误来自尝试调整大小或构造大小。