关于c ++:模板虚函数

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 );
        // ...
    }
};