模板虚函数

时间:2012-07-02 18:35:02

标签: c++ templates virtual

以下是一些代码:

class IWorker {
public:
    virtual void Do(int x) const = 0;
};

class TSomeWorker : public IWorker {
    void Do(int x) const {
        // ...
    }
};

现在,想象一下我们需要以函数Do应该成为模板的方式重构它(int变为某些T)。我知道C ++不允许创建模板虚拟函数。还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

这取决于您的具体需求。但根据你发布的内容我会建议:

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 :(得分:0)

因此,您希望混合使用静态多态(模板)和运行时多态(虚函数),但这些是正交的。在这种情况下,你需要施放:

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 );
        // ...
    }
};
相关问题