看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《littleshan (我要加入劍道社!)》之銘言: : http://www.cplusplus.com/reference/std/iterator/iterator_traits/ : 所以這樣寫就可以了 : template < typename IterType > : class Foo { : typedef typename std::iterator_traits<IterType>::value_type ValueType; : } ; : iterator_traits 的優點是不需要 c++0x 的 decltype : 而且它會幫你去掉 const 與 reference : 直接用 pointer 當 IterType 也是 OK 的 : 不過使用者傳入的 IterType 必需依照 STL 的慣例進行定義 : 也就是 IterType 自己要有 value_type/reference_type 等等的 member type : 如果你預設 user 只會傳 pointer 和 STL iterator : 那 iterator_traits 是最方便的解法 謝謝提醒 :) 參考STL的作法小改一下,應可符合原po需要: #include <iostream> #include <string> using namespace std; template <typename T> struct Foo { typedef T ValueType; }; template <typename T> struct Foo<T*> { typedef T ValueType; }; int main() { Foo<int*>::ValueType a = 1; // int Foo<int>::ValueType b = 1; // int Foo<char*>::ValueType c = 'A'; // char Foo<char>::ValueType d = 'B'; // char Foo<string*>::ValueType e = "Hello World"; // string Foo<string>::ValueType f = "Hello World"; // string cout << a << endl; cout << b << endl; cout << c << endl; cout << d << endl; cout << e << endl; cout << f << endl; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.38.226