c++ - 从基类特定函数调用子类方法

标签 c++ function virtual

我有一个关于在 C++ 编程中处理虚函数的问题。我有这样的东西:

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
    }
}

现在,如果我构造一个 subClass 类型的对象......

int main(int argc, char *argv[])
{
    subClass<anyType> * subClassObject = new subClass<anyType>();
    subClassObject->doSomethingElse(anyTypeObject);
}

....并调用基类的doSomethingElse方法,该方法会调用基类的doSomething方法,不会调用子类的doSomething方法。

我想要的是调用子类(不是baseClass)的doSomething 方法。

有人能告诉我如何实现吗?

最佳答案

您可以使用 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
    }
}

参见 this用于虚拟模板方法的讨论

关于c++ - 从基类特定函数调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848800/

相关文章:

c++ - 查找 C 风格转换的工具

C++ 下划线输出

javascript - 简单的时区时钟功能陷入错误状态,我不知道为什么

c++ - 无法将字段 'pair' 声明为抽象类型 'System'

C++ - 派生类中的 "Member function not declared"

c++ - 使用 Tab 键遍历 QTableView 行

c++ - 调试断言失败!表达式 : is_block_type_valid(header->_block_use)

postgresql - 如何获取存储在 PostgreSQL 中特定模式的数据库中的所有函数的列表?

javascript - 关于 console.log 和 javascript 函数的初学者问题

c++ - 继承覆盖