以循环方式使用来自另一个 class 的 typedef

using a typedef from another class in a circular manner

这是一道看C++语言极限的题。

大多数循环 class 依赖关系可以通过前向声明和指针解决。

但我想知道是否可以通过某种方式解决这个问题:

struct Y; // forward declaring Y does not solve the problem

struct X {
  using T = int;
  using Other = Y::T; //error: incomplete type 'Y' named in nested name specifier
};

struct Y {
  using T = float;
  using Other = X::T;
};

用人眼解析,你可以很容易地看到在这段代码中 X::Other 可以简单地理解为 float 因为 Y::T 不依赖于任何东西。但是我不知道有什么语法允许 "forward declare a typedef",比如 typename Y::T = float;(但 C++ 总是有未开发的黑暗角落)或允许上述类型定义的任何方法或习惯用法。

那么有没有办法解决以上问题呢? (具体来说:每个 class 使用另一个 class 的 typedef - 无需将 typedef 移到 class 之外)

您可以将 X 设为模板结构。像这样。

template <typename YType>
struct X {
  using T = int;
  using Other = typename YType::T;
};

struct Y {
  using T = float;
  using Other = X<Y>::T;
};

int main()
{
    X<Y> x;
}

这不是一个完美的解决方案,但当你遇到这样的极端情况时,有时你需要做一些修改。