从基类特定函数调用子类方法 [英] call sub class method from base class specific function
问题描述
我有一个关于在C ++编程中处理虚函数的问题。我有这样的东西:
template< class T>
class baseClass
{
virtual void doSomething(T& t){
//一些baseClass特定代码
}
void doSomethingElse( T& t){
//一些baseClass特定代码
this-> doSomething(t);
}
}
模板< class T>
class subClass
{
virtual void doSomething(T&){
//某些子类相关代码
}
}
$现在,如果我构造一个类型为subClass的对象....
<$>
<$>
<$> p $ p $ int main(int argc,char * argv [])
{
subClass< anyType> * subClassObject = new subClass< anyType>();
subClassObject-> doSomethingElse(anyTypeObject);
}
....并且调用 doSomethingElse
方法,这个方法将调用基类的 doSomething
方法,而不是子类。
我想要的是调用子类的 doSomething
方法(而不是 baseClass
)。
任何人都可以告诉我如何完成这项工作吗? 可以通过 CRTP 完成:
template< class T,class Derived>
class baseClass
{
void doSomethingElse(T& t){
//一些baseClass特定代码
static_cast< Derived *>(this) - > doSomething (T);
}
}
模板< class T>
class subClass:public baseClass< T,subClass>
{
void doSomething(T&){
//一些与子类相关的代码
}
}
请参阅此讨论虚拟模板方法
I've got a question concerning handling of virtual function in C++ programming. I have something like this:
template<class T>
class baseClass
{
virtual void doSomething(T& t) {
// some baseClass specific code
}
void doSomethingElse(T& t) {
// some baseClass specific code
this->doSomething(t);
}
}
template<class T>
class subClass
{
virtual void doSomething(T&) {
// some subclass related code
}
}
Now, if I construct an object of type subClass....
int main(int argc, char *argv[])
{
subClass<anyType> * subClassObject = new subClass<anyType>();
subClassObject->doSomethingElse(anyTypeObject);
}
.... and call the doSomethingElse
method of the base class, this method will call the doSomething
method of the base class and not of the sub class.
What I want to have, is calling the doSomething
method of the subclass (not of the baseClass
).
Can anybody tell me how to accomplish that?
You could accomplish it with CRTP:
template<class T, class Derived>
class baseClass
{
void doSomethingElse(T& t) {
// some baseClass specific code
static_cast<Derived*>(this)->doSomething(t);
}
}
template<class T>
class subClass : public baseClass<T, subClass>
{
void doSomething(T&) {
// some subclass related code
}
}
See this for discussion about virtual template methods
这篇关于从基类特定函数调用子类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!