Как создать объект STL итераторов типа шаблона? Я пытаюсь создать объект STL (скажем, вектор) итераторов типа шаблона, как показано ниже.
vector<vector<T>::iterator> it1;
Это не работает как в g++, так и в VC++, где. Оба компилятора говорят почти одно и то же
г++
Main.cpp:8:49: error: type/value mismatch at argument 1 in template parameter li
st for `template<class _T1, class _T2> struct std::pair'
Main.cpp:8:49: error: expected a type, got `std::vector<T>::iterator'
VС++
error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
Конечно, если вы создаете итератор Concrete Type, он работает, например.
vector<vector<int>::iterator> it1;
Вот минимальный неудачный пример
#include<vector>
#include<iterator>
using namespace std;
template<typename T>
class Spam {
public:
vector<vector<int>::iterator> it1; #Compiles Fine
vector<vector<T>::iterator> it2; #Fails
};
ПРИМЕЧАНИЕ
Из ответов я понял, что если тип зависим, то нужно префикс ключевых слов typename
. Если это так, то
vector< vector<T> > it;
также должен потерпеть неудачу, но это не так. Кажется, что это терпит неудачу и требует typename
ключевых слов, если зависимое имя является typedef
typename
, но в случаеvector<vector<T> >
зависимого имени нет. (Ниvector
, ниT
нет) - person MSalters   schedule 01.05.2012