我想创建一个类似于std :: iterator_traits :: value_type的构造,它可以使用相同的语法无缝工作于所有类型。想象一下,我们有以下几种:C++的value_type是否可以从iterator_traits扩展到所有类型?
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++中做什么?
手头有什么问题?顺便说一句,你的'value_type'结构通常被称为'identity'。 – GManNickG 2010-02-18 20:14:21
我有不同像素类型的图像,其中一些是结构体,其中一些是浮点数,其中一些是整数。要做一些与它们数学的事情(例如找到平均值)需要告诉编译器用于计算的类型。而且我已经定义了VALUE_TYPE来返回iterator_traits :: value_type,所以最好将它们组合成一个构造。 –
2010-02-19 17:14:56