是否可以在类层次结构中获取基类类型?
例如:
struct A{};
struct B{} : public A;
struct C{} : public B;
Run Code Online (Sandbox Code Playgroud)
我想要一些typedef Base<T>::Type
内部像这样的模板:
Base<A>::Type == A
Base<B>::Type == A
Base<C>::Type == A
Run Code Online (Sandbox Code Playgroud)
这可能吗?我有多重继承的情况怎么样?
Ker*_* SB 21
C++中的类可以有多个基类,所以没有任何意义可以让"让我成为基础"特征.
然而,TR2新增功能包括新的编译器支持的特性std::tr2::bases
和std::tr2::direct_bases
,返回基类的不透明类型列表.
我不确定这是否会进入C++ 14,或者它是否会独立发布,但GCC 似乎已经支持了这一点.
这可能是一个很好的方法,具体取决于您的用例。声明base
在基类本身中命名的基类的 typedef 。
然后派生类X
将继承它作为 typename X::base
。
所以B::base
是A
和C::base
是A
。
struct A
{
typedef A base;
};
struct B : A {};
struct C : B {};
template<class X>
void f()
{
typename X::base x;
}
int main()
{
f<B>();
f<C>();
}
Run Code Online (Sandbox Code Playgroud)
我想std::is_base_of
可以帮到你
#include <type_traits>
std::is_base_of<B, D>()
Run Code Online (Sandbox Code Playgroud)
如果D派生自B或两者都是相同的非联合类,则提供成员常量值等于true.否则值为false.
您可以使用它来检查某个类是否是另一个类的基类:
std::is_base_of<A, A>() // Base<A>::Type == A
std::is_base_of<A, B>() // Base<B>::Type == A
std::is_base_of<A, C>() // Base<C>::Type == A
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9602 次 |
最近记录: |