Aly*_*Aly 3 c++ templates abstract-class interface
我有一个接口,并试图让我的模板化类实现这个接口。一个简单的例子来演示这个问题是:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨说:
error: templates may not be 'virtual'
virtual void Concrete<T>::do_something(int a){
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这种行为?
是的,nm 说的。Clang 的错误消息在这里更有帮助:
so.cpp:19:1: error: 'virtual' can only be specified inside the class definition
virtual void Concrete<T>::do_something(int a){
^~~~~~~~
Run Code Online (Sandbox Code Playgroud)
删除 virtual 关键字(将它写在类定义中就足够了/唯一正确的方法)。
您的代码还有一些其他问题(~Base()未定义,Concrete()需要参数),但是您询问的问题只需删除错误的virtual.
| 归档时间: |
|
| 查看次数: |
978 次 |
| 最近记录: |