从基类特定函数调用子类方法 [英] call sub class method from base class specific function

查看:363
本文介绍了从基类特定函数调用子类方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于在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&){
//某些子类相关代码
}
}


<$>

<$>

<$> 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆