template virtual function
下面是一些代码:
1 2 3 4 5 6 7 8 9 10 | class IWorker { public: virtual void Do(int x) const = 0; }; class TSomeWorker : public IWorker { void Do(int x) const { // ... } }; |
现在,假设我们需要以这样的方式重构它,函数do应该成为模板(in t将变为一些t)。我知道C++不允许创建模板虚拟函数。还有其他选择吗?
这取决于你的具体需要。但根据你的帖子,我建议:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 { // ... } }; |
所以,您需要混合静态多态性(模板)和运行时多态性(虚拟函数),但这些是正交的。在这种情况下,您需要铸造:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 ); // ... } }; |