【问题标题】: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”的函数指针向量,这样我就可以从一个地方调用所有存储的类。
大家有什么建议吗?
【问题讨论】:
标签:
c++
templates
function
member
【解决方案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】:
你知道,这正是我需要做的。奇怪的是,我很早就将它视为对我的用例有效的解决方案,因为现在我无法理解。我想我被我在同一个地方为编译时分派所做的一些元编程工作蒙蔽了双眼(即在我糊涂的大脑中混淆了编译时间和运行时)。
谢谢你的震撼!