typename除了直接使用在template裡面當然宣告template parameter的地方, 如以下情形之外
templateclass Foo { public: void foo(T a); };
當在程式內部的name跟template parameter有相依關係的時候, 這個就叫做dependent name, 在C++當中, 他預設不會幫你假設這樣的name是type, 除非你有明確的告訴parser.
所以像以下的情形, 你就必須在前面加上typename, 這樣compiler才會認為宣告的T::iterator 也是一個type, 才不會有compiler error.
templateclass Foo { public: void foo(T a); void goo(typename T::iterator i); private: typename std::vector ::iterator a; };
沒有留言:
張貼留言