腐烂至基层

lig*_*ulb 0 c++ templates type-traits c++17

是否有一个特征返回特定类的基类,并假定不涉及多重继承?基本上像这样:

struct Base
{

};

struct Derived : public Base
{

};

struct DerivedDerived : public Derived
{

};

static_assert(std::is_same_v<base<DerivedDerived>::type,Derived>);
static_assert(std::is_same_v<base<Derived>::type,Base>);
static_assert(std::is_same_v<base<Base>::type,Base>);
// with levels
static_assert(std::is_same_v<base<0,DerivedDerived>::type,Base>);
static_assert(std::is_same_v<base<1,DerivedDerived>::type,Derived>);
static_assert(std::is_same_v<base<2,DerivedDerived>::type,DerivedDerived>);
static_assert(std::is_same_v<base<0,Derived>::type,Base>);
static_assert(std::is_same_v<base<1,Derived>::type,Derived>);
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

不。您可以使用来测试给定类型是否继承自给定其他类型std::is_base_of,而无需直接询问基本类型。也就是说,直到将来某个时候C ++得到静态反射。