【问题标题】:C++: Using a templated class to implement an abstract classC++:使用模板类实现抽象类
【发布时间】:2014-11-02 19:54:59
【问题描述】:

我有一个接口,并试图让我的模板类实现这个接口。演示该问题的一个简单示例是:

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

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

【问题讨论】:

  • 从函数定义中移除 virtual 关键字。它足以在类内的声明中包含它。

标签: c++ templates interface abstract-class


【解决方案1】:

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

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

去掉 virtual 关键字(写在类定义中就足够了/唯一正确的方法)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多