我有一个关于在 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/