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