这是一些代码:
class IWorker {
public:
virtual void Do(int x) const = 0;
};
class TSomeWorker : public IWorker {
void Do(int x) const {
// ...
}
};
现在,假设我们需要重构它,使得函数 Do 应该成为模板(int 更改为某个 T)。我知道 C++ 不允许创建模板虚函数。有没有其他选择?
这取决于您的具体需求。但是根据您发布的内容,我建议:
template<typename T>
class IWorker {
public:
virtual void Do(T x) const = 0;
};
template<typename T>
class TSomeWorker : public IWorker<T> {
void Do(T x) const {
// ...
}
};
因此,您想混合使用静态多态性(模板)和运行时多态性(虚拟函数),但它们是正交的。在这种情况下,您需要强制转换:
class IWorker {
public:
virtual void Do(void* x) const = 0;
};
template< typename T >
class TSomeWorker : public IWorker {
void Do(void* x) const {
T* realX = reinterpret_cast< T* >( x );
// ...
}
};