通过模板编译时父子关系

时间:2015-04-16 03:29:31

标签: c++ templates generic-programming

这主要是出于好奇。我想知道是否有办法在编译时使用模板定义父类型与子类型的关系。

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)

1 个答案:

答案 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;
}