指向模板类成员函数的函数指针

Posted

技术标签:

【中文标题】指向模板类成员函数的函数指针【英文标题】:Function pointer to template class member functions 【发布时间】:2010-09-13 20:40:10 【问题描述】:

我有一个模板类(部分)定义为

template <class T> MyClass

public:
   void DoSomething()
;

如果我想从另一个类调用 DoSomething,但能够在同一个地方为多个“T”类型执行此操作,我会坚持一个想法,因为方法函数指针唯一地受限于类类型。当然,每个 MyClass 都是不同的类型,所以我不能以“多态”的方式存储指向 MyClassDoSomething() 的函数指针。

我的用例是我想在一个持有类中存储一个指向“DoSomething”的函数指针向量,这样我就可以从一个地方调用所有存储的类。

大家有什么建议吗?

【问题讨论】:

【参考方案1】:

好的,所以仿函数解决方案不能按您的需要工作。也许你应该让你的模板类继承自一个通用的基础“接口”类。然后你使用这些向量。

类似这样的:

class Base  
public:
  virtual ~Base()
  virtual void DoSomething() = 0;


template <class T> class MyClass : public Base 
public:
    void DoSomething()
;

std::vector<Base *> objects;
objects.push_back(new MyClass<int>);
objects.push_back(new MyClass<char>);

【讨论】:

【参考方案2】:

你知道,这正是我需要做的。奇怪的是,我很早就将它视为对我的用例有效的解决方案,因为现在我无法理解。我想我被我在同一个地方为编译时分派所做的一些元编程工作蒙蔽了双眼(即在我糊涂的大脑中混淆了编译时间和运行时)。

谢谢你的震撼!

【讨论】:

以上是关于指向模板类成员函数的函数指针的主要内容,如果未能解决你的问题,请参考以下文章

基类的函数指针指向子类的成员函数?

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

C++函数指针与成员函数指针

C++中怎么获取类的成员函数的函数指针

c++类的成员函数指针如何转为普通指针

如何获得指向类的复制构造函数的成员函数指针?