gpt4 book ai didi

c++ - 类模板继承自不完整的类

转载 作者:行者123 更新时间:2023-12-01 19:25:45 26 4
gpt4 key购买 nike

由于继承自不完整类型 ( https://godbolt.org/z/G35wj9 ),此代码无法编译:

template<typename>
class Incomplete;

class T : public Incomplete<T> {};

template<typename>
class Incomplete {};

int main()
{
[[maybe_unused]] T x;
}

我相信这条规则也适用于类模板。然而,这段代码编译得很好( https://godbolt.org/z/cU6GNt ):

template<typename>
class Incomplete;

template<int d>
class T : public Incomplete<T<d>> {};

template<typename>
class Incomplete {};

int main()
{
[[maybe_unused]] T<1> x;
}

涉及类模板时,基类是否只需要在实例化时完成即可?

最佳答案

When class templates are involved, is the base class only required to be complete at the point of instantiation?

如果它是一个依赖基地,那么可以。凭借这一点,编译器不知道什么 Incomplete<T<d>>位于模板定义点。毕竟,对于 d 的某些值我们可以拥有 Incomplete<T<d>> 的特化这与主模板声明完全不同。

template<>
class Incomplete<T<0>> {};

这不是循环依赖。简单地命名专业T<0>不会导致它被实例化。这只是一个类型名称。但这确实意味着编译器没有追索权,只能等到它可以检查基类是否有效。

另一方面,如果基类不是依赖类型,则将其用作基类将是格式错误的。

关于c++ - 类模板继承自不完整的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58949760/

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