它是一个包含5个对象和25个函数的C ++类。在运行时我想将函数的对象和名称作为参数传递,并使传递的对象调用指定的方法。
就像
void actionToBetaken(object,string method_name)
{
object.method_name();
}
在C ++中如何实现?
答案 0 :(得分:6)
通常使用函数指针完成:
template <typename T, typename U>
void f(T &object, U (T::*method)())
{
(object.*method)();
}
这假定该方法不带参数。您可以通过执行以下操作传递方法:
template <typename T, typename U, typename... Args>
void f(T &object, U (T::*method)(Args...), Args&&... args)
{
(object.*method)(std::forward<Args>(args)...);
}
int main()
{
T t;
f(t, &T::f, 5); // calls t.f(5)
}
您还可以使用std::function
或std::bind
来提供此类功能。