C ++:使用模板化的类来实现抽象类

时间:2014-09-09 11:46:59

标签: c++ templates interface abstract-class

我有一个界面,我试图让我的模板类实现这个接口。一个证明问题的简单例子是:

class Base{

    virtual void do_something(int a) = 0;
    virtual ~Base();

};

template<typename T>
class Concrete : Base{

    T _t;
    Concrete(T t):_t(t){};
    virtual void do_something(int a);
};

template<typename T>
virtual void Concrete<T>::do_something(int a){
    std::cout << a << std::endl;
}

int main(int argc, char **argv) {

    Concrete<int> c;
    c.do_something(5);
}

然而编译器抱怨说:

error: templates may not be 'virtual'
 virtual void Concrete<T>::do_something(int a){

有没有办法实现这种行为?

1 个答案:

答案 0 :(得分:4)

是的,是什么时候说过。 Clang的错误信息在这里有点帮助:

so.cpp:19:1: error: 'virtual' can only be specified inside the class definition
virtual void Concrete<T>::do_something(int a){
^~~~~~~~

删除虚拟关键字(在类定义中写入足够/唯一正确的方法)。

您的代码还有一些其他问题(~Base()未定义,Concrete()需要参数),但您问的问题只需删除错误的virtual即可解决。 / p>