c++ - 在模板中存储类成员函数

标签 c++ templates

我需要像这样在某处存储一个成员函数指针:

void Class1::function1(int a, int b)
{
  ...
}

struct parameters
{
   int a;
   int b;
}

myStoreClass.store(&Class1::function1, parameters);

然后可以像这样调用它:

myStoreClass.call();

以便使用适当的参数调用该函数。

既然它是一个成员函数,我想我也应该存储一个 Class1 对象指针,但是我如何用模板存储一个成员函数指针?

最佳答案

需要参数化成员函数所在对象的类型,并传递一个指向该函数的指针。为了调用成员函数,您还需要传递指向对象的指针和调用参数。这是一个示例:

class Foo 
{
public:
    void DoIt (int a, int b)
    {   
    }   
};

class Bar 
{
public:
    void DoItAgain (int x, int y)
    {   
    }   
};

template <typename Obj>
void DoSomething (Obj* that, void (Obj::*fnThat)(int,int), int i, int j)
{
    (that->*fnThat)(i, j); 
}

int main()
{
    Foo foo;
    Bar bar;

    void (Foo::*fnFoo)(int,int) = &Foo::DoIt;

    (foo.*fnFoo)(42,43);

    DoSomething (&foo, fnFoo, 99, 100);
    DoSomething (&bar, &Bar::DoItAgain, 200, 300);
}

关于c++ - 在模板中存储类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975164/

相关文章:

c++ - 类模板的条件无效成员函数(隐式实例化有效;显式实例化失败)

c++ - C/C++ 中结构的 `new` 和 `new()` 有什么区别?

c++ - 如何将可变参数传递给 std::thread?

c++ - 使用模板参数作为模板参数类型

c# - 我应该采用哪种方法在 C# 中进行模板化?

c++ - 带有<>标记的模板类名

c++ - 如何自定义wxApp实现协议(protocol)?

c++ - 本地抽象类的纯虚拟析构函数

c++ - 复数简单误差

c++ - 模板结构中的重载运算符