gpt4 book ai didi

C++模板类自继承

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:42 28 4
gpt4 key购买 nike

我有这个代码:

template<typename A, typename B = A>
class MyClass;

template<typename A>
class MyClass<A, void>
{
protected:
A a;

MyClass<A, void>(const A& a):
a(a)
{}
public:
const A& getA() const
{
return a;
}
};

template<typename A, typename B>
class MyClass : public MyClass<A, void>
{
private:
B b;
public:
MyClass<A, B>(const A& a, const B& b):
MyClass<A, void>(a), b(b)
{}

const B& getB() const
{
return b;
}

const auto getAplusB() const
{
return a+b;
}
};

getAplusB方法无法编译并显示消息 a is not declared .但是,继承似乎有效,所以我可以使用 this->getA() + b .我也尝试过 dynamic_cast<const MyClass<A, void>*>(this)->a + b , 但又出现了另一个编译错误 a is protected .我在这里缺少什么?

最佳答案

您只需要使用 this->a限定名称 MyClass<A, void>::a .这是因为 a是基础类模板的成员。有一种叫做name lookup的东西- 当编译器看到 name 时, 它会说 name lookup .

只是试图进行不合格的访问 a不会工作,因为它是 dependent name (其含义取决于某处某个模板的实例化)。因此,您必须限定对 a 的访问权限

关于C++模板类自继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48274540/

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