派生类中的类型别名依赖名称:不完整类型的无效使用?

问题描述 投票:0回答:2

我想了解模板化派生类中类型别名的用法,如下面的简单示例所示。我收到一条错误消息:“无效使用不完整类型。

我的问题是:我有一个模板化派生类,其模板参数是基类,我需要访问基类的类型。

下面的简单示例不符合第 21 行的错误消息:“invalid use of incomplete type ‘struct B2’”。 你能解释一下为什么情况 1 没有抱怨,为什么情况 2 不能编译吗?

有办法绕过去吗?

struct A {};

/* Case 1: this implementation compiles well */
struct B1: A {
  using type = typename B1::A;
};


/* Case 2: this implementation doesn't compile */
template<class U>
struct B2: U {
  using type = typename B2::U;
};


int main() {
  // Case 1
  B1 b1;  // OK

  // Case 2:
  B2<A> b2;  // error: invalid use of incomplete type ‘struct  B2<A>’
}
c++ templates types c++17 alias
2个回答
0
投票

有什么办法可以绕过吗?...

是的,只需将其替换为

using type = U; 

演示


0
投票

使用类型=U;为什么你不能这样做?

© www.soinside.com 2019 - 2024. All rights reserved.