我需要定义一个模板结构:
element<T>::type
是类型:
T::element_type
如果 T 包含一个名为 element_type 的(公共(public))typedef,否则(如果它不包含这样的 typedef)
element<T>::type
是类型
T::value_type
如果 T 是可变的并且是类型
const T::value_type
如果 T 是常量。
我真的很纠结这个,非常感谢任何建议! :)
非常感谢您的提前帮助!
最佳答案
也许是这样的:
template <typename T>
struct has_element_type
{
typedef char yes[1];
typedef char no[2];
template <typename C>
static yes& test(typename C::element_type*);
template <typename>
static no& test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};
template <typename T>
struct is_const
{
static const bool value = false;
};
template <typename T>
struct is_const<const T>
{
static const bool value = true;
};
template <typename, bool> // true -> const
struct value_type_switch;
template <typename T>
struct value_type_switch<T, true>
{
typedef const typename T::value_type type;
};
template <typename T>
struct value_type_switch<T, false>
{
typedef typename T::value_type type;
};
template <typename, bool> // true -> has element_type
struct element_type_switch;
template <typename T>
struct element_type_switch<T, true>
{
typedef typename T::element_type type;
};
template <typename T>
struct element_type_switch<T, false>
{
typedef typename value_type_switch<T, is_const<T>::value>::type type;
};
template <typename T>
struct element
{
typedef typename element_type_switch<T,
has_element_type<T>::value>::type type;
};
这当然应该拆分和组织。
关于c++ - 基于嵌套 typedef 的存在的类型决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980879/