2011-08-27 53 views
1

我读过网页上的模板虚拟函数是不允许的,这是真的吗? 这是一个有点有点不可思议,因为这些代码编译在我的Eclipse的G ++C++中的模板和虚函数?允许?

template <class T> 
class A { 

public: 
    virtual ~A<T>() { } 
    virtual void printMe() {cout << "I am A class" << endl;} 
}; 

template <class T> 
class B: public A<T> { 

public: 
    void printMe() {cout << "I am B class" << endl;} 
}; 

int main() { 

    A<int> * ptr = new B<int>; 
    ptr->printMe(); 
    delete ptr; 
    return 0; 
} 

问候很大,罗南

+0

你是从哪里读的? – littleadv

+0

这里:http://stackoverflow.com/questions/2354210/can-a-member-function-template-be-virtual –

回答

3

在模板类型的虚拟方法(如被看见在你的例子)是有效的。

你指的是限制采取这种形式:

class type { 
    //... 
    template <typename T> virtual void r() const; 
}; 
+0

然后你说的是模板和虚函数不存在于C++中?可能是什么原因?动态绑定模板的虚拟和早期绑定?他们不混合? –

+0

看到大卫的优秀答案在这里:http://stackoverflow.com/questions/757270/is-making-a-function-template-specialization-virtual-legal – justin

+0

确实很好,10倍:) –

0

你在这里的不是一个模板虚函数,而是包含普通的虚拟函数模板类。

正如你所发现的那样,这很好。