使用C ++ 11或Boost,是否有可能创建一个存储对象指针(实例),方法指针和一些参数的对象,并且可以在以后使用这些参数调用此方法?我的意思是 - 如何只使用std或Boost模板?我很确定这是可能的,但不知道什么是最好的方式。
这是一个真正的问题:在同一个容器中存储几个引用不同方法(具有不同签名)的对象是否有可能?
答案 0 :(得分:4)
这是std::bind
和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'); }
答案 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();