繁体   English   中英

将mem_fun存储在标准容器中

[英]storing mem_fun in a standard container

有没有办法创建一个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或C ++ 0x的function


编辑:使用此特定错误消息,我假设您正在执行调用包含类型的默认构造函数(例如, resize或使用向量的构造函数指定大小)。 您无法使用这些功能。

mem_fun_t满足要存储在容器中的要求(它是可复制构造和可分配的),所以答案是肯定的。

但是,它不是默认构造或可比较的,所以有些东西你不能用它们的容器做,包括:

  • 调整大小,除非您提供值填充
  • 使用非零大小构造,除非您提供要填充的值
  • 比较容器

您看到的错误来自尝试调整大小或使用大小构造。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM