我想创建一个类似于 std::iterator_traits::value_type 的构造,它可以使用相同的语法对所有类型无缝工作。想象一下,我们有以下内容:
template <typename T>
struct value_type {
typedef T type;
};
#define VALUE_TYPE(T) typename value_type<T >::type
这适用于 POD 类型。我可以将它专门用于我自己的课程:
struct MyClass {
typedef float value_type;
};
template <>
struct value_type<MyClass> {
typedef MyClass::value_type type;
};
虽然我更愿意在理想世界中避免额外的 value_type 实例化。
问题在于 STL 迭代器。我需要一个让我进入迭代器层次结构的专业化。这失败了,因为编译器选择了基本情况:
template <>
struct value_type<std::_Iterator_base_aux> { // MSVC implementation
typedef value_type type;
};
选择层次结构更高的类(_Iterator_with_base 是最自然的,因为这是定义 value_type 的地方)失败,因为它需要将所有迭代器特征指定为模板参数。
我正在尝试做的事情甚至可能在 C++ 中实现吗?