打包一个对象,调用它的方法和调用它的参数到一个对象中,以便以后调用它

时间:2013-08-14 20:37:57

标签: c++ boost

使用C ++ 11或Boost,是否有可能创建一个存储对象指针(实例),方法指针和一些参数的对象,并且可以在以后使用这些参数调用此方法?我的意思是 - 如何只使用std或Boost模板?我很确定这是可能的,但不知道什么是最好的方式。

这是一个真正的问题:在同一个容器中存储几个引用不同方法(具有不同签名)的对象是否有可能?

2 个答案:

答案 0 :(得分:4)

这是std::bindstd::function的经典用例:

#include <functional>
#include <vector>

using namespace std::placeholders;   // for _1, _2, ...

std::vector<std::function<int(double, char)>> v;

Foo x;
Bar y;

v.emplace_back(std::bind(&Foo::f, &x, _1, _2));         // int Foo::f(double, char)
v.emplace_back(std::bind(&Bar::g, &y, _2, true, _1));   // int Bar::g(char, bool, double)
v.emplace_bacK(some_free_function);                     // int some_free_function(double, char)

使用:

for (auto & f : v) { sum += f(1.5, 'a'); }

答案 1 :(得分:3)

查看C ++ 11提供的std::bind。它完全符合你的要求。你甚至不需要提升。例如:

class C
{
public:
  void Foo(int i);
}

C c;

// Create a function object to represent c.Foo(5)
std::function<void(void)> callLater=std::bind(&C::Foo,std::ref(c),5);

// Then later when you want to call c.Foo(5), you do:
callLater();