gpt4 book ai didi

c++ - 使用 C++ 将子类与父类链接的方法

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:17 24 4
gpt4 key购买 nike

有没有一种方法可以在不强制转换、重写方法或使用接口(interface)的情况下将子类对父类(super class)的调用链接起来。例如。做的时候

class A {
public:
A& foo() { return *this; }
};

class B : public A {
public:
B& bar() { return *this; }
};

int main(void) {
B b;
b.foo().bar();
return 0;
}

用 clang 编译时出现错误

main.cpp:13:10: error: no member named 'bar' in 'A'
b.foo().bar();
~~~~~~~ ^
1 error generated.

我明白为什么(因为 A 返回对自身的引用),但我希望它返回它的子类类型 B,因为它是在该上下文中调用的。这可能吗?或者我需要将 B 定义为

class B : public A {
public:
B& bar() { return *this; }
B& foo() { A::foo(); return *this; }
};

并使 foo() 成为虚拟的?

最佳答案

您可以使用 CRTP图案:

template<class Derived>
class A {
public:
Derived& foo() { return *static_cast<Derived*>(this); }
};

class B : public A<B> {
public:
B& bar() { return *this; }
};

int main(void) {
B b;
b.foo().bar();
return 0;
}

关于c++ - 使用 C++ 将子类与父类链接的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49496116/

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