gpt4 book ai didi

c++ - 用模板实现派生类

转载 作者:行者123 更新时间:2023-12-02 10:02:16 25 4
gpt4 key购买 nike

我有一个在A中定义的模板化基类B和模板化派生类headers.h,实现转到source.cpp
以下代码无法编译,因为x不在B的范围内。问题是我在做什么错?我发现,如果未将A用作模板,则代码可以正常编译(带有相关更改)。

// headers.h
template <typename T>
class A
{
public:
T x;
}

template <typename T>
class B : public A<T>
{
void foo(); // do something with x
}

// source.cpp
#include headers.h

template <typename T>
void B<T>::foo() {} // do something with x

// explicit instantiation
template class B<double>;

最佳答案

Below code does not compile as x is not in the scope of B


A<T>是类模板 B的基类:
template<typename T>
class B: public A<T> {
// ...
};

尽管 x的成员 A<T>实际上是在 B中继承的,但在 B中找不到该成员,因为在 x中使用时,未在其基类 B中查找名称 A<T>。原因是,默认情况下,在不依赖模板参数的基类中不执行名称查找(基类 A<T>取决于 B的模板参数,即 T)。要从 xA<T>中查找名称 B,您需要将其表示为 this->xA<T>::x

I found that if A is not templated the code compiles fine



在这种情况下,基类不依赖于模板参数,因此即使未将其表示为 xx,也可以在基类中执行 B的查找,并从 this->x中找到成员 A::x

关于c++ - 用模板实现派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62040707/

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