【发布时间】: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