我想創建一個類似於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