鉴于这些课程示例,
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