Inheritance level in C++

By on

I’ve been looking for a way to know the level of a class in an inheritance list in C++, here is a quick and dirty solution using a template class which increments its level value when used.

template <class T> struct Inc: public T
{
    enum  { level = 1 + Inc::level };
};

This is a bit cumbersome to use, I have no doubt there exists a better way to do this (I would be thankful to know it). It implies to add a public enum in the root class, and make inherit children to the template specialized in the parent class. Here is an example of code using it :

class           Root
{
public:
  enum  { level = 0 };
};

class           One: public Inc<Root> {
};

class           Second: public Inc<One> {
};

class           Third: public Inc<Two> {
};

#include <iostream>

int             main(void)
{
  Root          root;
  One           first;
  Second        second;
  Third         third;

  std::cout << "My level is " << root.level << std::endl;
  std::cout << "My level is " << first.level << std::endl;
  std::cout << "My level is " << second.level << std::endl;
  std::cout << "My level is " << third.level << std::endl;
}

The output:

$ ./a.out
My level is 0
My level is 1
My level is 2
My level is 3
$

Many thanks to korfuri for correcting misconceptions between inheritance lists and inheritance trees in the initial article.