Search code examples
c++templatescode-translation

Circular reference of templates in C++


Consider something like this in C#:

class C<T> {}
class D : C<E> {}
class E : C<D> {}

Is an equivalent construction possible in C++ using templates?


Solution

  • Yes, you can forward declare E:

    template <typename T> class C {};
    
    class E;
    class D : public C<E> {};
    class E : public C<D> {};
    

    or, as per Franks suggestion:

    template <typename T> class C {};
    
    class D : public C<class E> {};
    class E : public C<D> {};
    

    Whether this works in your real case depends on whether C requires T to be complete (it does not in this stripped down example).

    PS: I don't know C#, so I am not sure if you wanted private or public inheritance. The above uses public inheritance, while the default for classes declared with the keyword class is private inheritance.