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

C++: Using a templated class to implement an abstract class

本文关键字:实现 抽象类 C++      更新时间:2023-10-16

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

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

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

是的,n.m.说了什么。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来解决。