1

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

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

4

2 回答 2

4

std::bind这是and的经典用例std::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'); }
于 2013-08-14T20:45:08.683 回答
3

查看std::bindC++11 提供的内容。它完全符合您的要求。你甚至不需要为此提升。例如:

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();
于 2013-08-14T20:40:04.427 回答