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

标签 c++ c++11

很难说这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center .




9年前关闭。




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

它像是

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

在 C++ 中怎么可能?

最佳答案

这通常使用函数指针来完成:

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 对于这种功能。

关于c++ - 在 C++ 中选择在运行时调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15449798/

相关文章:

c++ - 包含头文件时出错

c++ - 为什么每个 C++ 平台都有不同的字符串类?

c++ - 跨 DLL/共享库使用命名空间

线程化时出现 C++ 错误,std::invoke:

c++ - 如何截断字符串数组? C++

c++ - 加倍加倍是否会导致0.0?如果没有,该如何实现?

c++ - 使用 SFINAE 的派生类的通用接口(interface)

c++ - 将左值传递给右值

c++ - 为什么我要 std::move 一个 std::shared_ptr?

c++ - 可以使用 C++11 decltype 为现有函数的函数指针创建 typedef 吗?