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

艾莉

我有一个接口,正在尝试使我的模板化类实现此接口。一个简单的例子来演示这个问题是:

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){

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

科尔雅

是的,nm怎么说。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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章