gpt4 book ai didi

c++ - 从派生范围调用函数

转载 作者:行者123 更新时间:2023-11-28 00:43:57 26 4
gpt4 key购买 nike

我有一些代码似乎与此类似:

#include <iostream>

class Base {
public:
void test() {
std::cout << "Base::test()" << std::endl;
}

void test2() {
test();
}
};

class Derived : public Base {
public:
void test() {
std::cout << "Derived::test()" << std::endl;
}
};

int main() {
Derived d;
d.test2();
return 0;
}

现在输出当然是 Base::test(),但是我希望它输出 Derived::test() without 使用虚函数调用和对函数重载使用不同的表示法称为:Derived::test

有人知道这是否有可能实现吗?

最佳答案

您可以使用所谓的奇怪重复类型模式 (CRTP) 并生成 Base模板:

template<typename D>
class Base {
public:
void test() {
std::cout << "Base::test()" << std::endl;
}

void test2() {
(static_cast<D*>(this))->test();
}
};

然后,您将得出 Derived来自 Base<Derived>而不仅仅是 Base :

class Derived : public Base<Derived> {
// ^^^^^^^^^^^^^
// This is the only change required in Derived
public:
void test() {
std::cout << "Derived::test()" << std::endl;
}
};

这是一个live example .

关于c++ - 从派生范围调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com