这主要是出于好奇。我想知道是否有办法在编译时使用模板定义父类型与子类型的关系。
template <class T>
struct parent_t {
T *child;
};
template <class T>
struct child_t {
T *parent;
};
由于尝试构造时无限模板递归似乎不可能:
auto parent = new parent_t<child_t<parent_t< (... to infinity)
答案 0 :(得分:0)
你可以通过一个额外的间接层来实现:
template <typename T> struct parent;
template <typename T> struct child;
struct Traits {
using p = parent<Traits>;
using c = child<Traits>;
};
template <typename T>
struct parent {
typename T::c* child;
};
template <typename T>
struct child {
typename T::p* parent;
};
int main()
{
parent<Traits> p{nullptr};
child<Traits> c{nullptr};
c.parent = &p;
p.child = &c;
}