3
有沒有辦法檢測到,如果struct
有typedef
哪個沒有被繼承?檢測非繼承typedef的特質
,下面的代碼失敗在C
#include <iostream>
struct A { };
struct B : public A { typedef A Base; };
struct C : public B {};
template<typename T>
struct to_void
{
typedef void type;
};
template <typename T, typename dummy = void>
struct has_base_typedef : std::false_type {};
template <typename T>
struct has_base_typedef<T, typename to_void<typename T::Base>::type> : std::true_type {};
int main()
{
std::cout << has_base_typedef<A>::value;
std::cout << has_base_typedef<B>::value;
std::cout << has_base_typedef<C>::value;
}
特徵爲C
給true
因爲Base
是繼承(private
修改不利於AFAIK)
我的目標是讓片斷打印010
Small example玩ideone。
OP預期'010'並得到了[101010](http://stackoverflow.com/用戶/ 2352671/101010):-) – Jarod42
@ Jarod42不錯的一個傢伙。 – 101010
謝謝你的答案,不幸的是,這不是我查找的一般方法。派生類可能不止一個(必須使用類型列表),結構可以在一個庫中,當創建新的派生類時不應該(不能)修改... – relaxxx