鉴于这些课程示例,

class A {};
class B : A {};
class C {};
class D : A, C {};
class E : D {};


该函数应返回A类的继承数为0,而对于B,C,D和E类,此函数应分别返回1、0、2、1。


  注意:该函数不应考虑整个继承
  类(例如,E接受从A和C继承的D
  间接地,它会有3个,但就我而言,我想知道这个数字
  类在其声明中的继承关系)

最佳答案

不幸的是,这还没有输入语言。有std::direct_bases个提议,但被拒绝了:What is the status of N2965 - std::bases and std::direct_bases?

因此,您需要自己动手-有很多方法可以解决此问题,但是例如,它可能类似于以下内容:

#include <tuple>

    class A{
        public:
      using bases = std::tuple<>;
    };

    class B:A{
        public:
      using bases = std::tuple<A>;
    };

    class C{
        public:
      using bases = std::tuple<>;
    };

    class D:A,C{
        public:
      using bases = std::tuple<A,C>;
    };

    class E:D{
        public:
      using bases = std::tuple<D>;
    };

    template <class T>
    size_t count_bases() {
        return std::tuple_size<typename T::bases>::value;
    }

    int main() {
      return count_bases<D>();//returns '2'
    }


自己尝试:https://godbolt.org/z/u0qoZa

10-08 16:15