小编scp*_*son的帖子

是否可以使用相互引用的C++模板?

问题

我有以下两个结构声明:

template <typename T>
struct Yin {
  T *m_ptr;
};

template <typename T>
struct Yang {
  T *m_ptr;
};
Run Code Online (Sandbox Code Playgroud)

而且我想找到X并且Y在替换之后得到这样的东西:

// Not real C++ syntax
struct Yin<X> {
  Yang<Y> *m_ptr;
}

struct Yang<Y> {
  Yin<X> *m_ptr;
};
Run Code Online (Sandbox Code Playgroud)

但我想没有硬编码这样做Yin,并Yang为彼此的定义,所以X会是这样Yin<Yang<Yin<Yang<...>>>>.

我可以在没有模板参数的情况下这样做:

struct Yin;
struct Yang;

struct Yin {
  Yang *m_ptr;
};

struct Yang {
  Yin *m_ptr;
};
Run Code Online (Sandbox Code Playgroud)

但我的真实用例要复杂得多,我真的很想让它变得通用.有谁知道这样做的方法?或者可能会看到一些我不知道的明显事物?

我已经将这个问题标记为c++14因为我正在使用clang编译相关代码,-std=c++1y我很乐意使用任何c ++ 11/c ++ 14功能来实现这一功能.

一个无法编译的可能解决方案.

这是一个看起来应该工作的解决方案,但不编译(并给我无用的错误消息): …

c++ templates c++14

11
推荐指数
1
解决办法
239
查看次数

标签 统计

c++ ×1

c++14 ×1

templates ×1