选择在c ++中在运行时调用的函数

时间:2013-03-16 13:22:55

标签: c++ c++11

它是一个包含5个对象和25个函数的C ++类。在运行时我想将函数的对象和名称作为参数传递,并使传递的对象调用指定的方法。

就像

void actionToBetaken(object,string method_name)
 {
       object.method_name();
 }

在C ++中如何实现?

1 个答案:

答案 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::functionstd::bind来提供此类功能。