У меня есть вектор, который я хочу, чтобы обернуть в некоторой дополнительной функциональности:Получить TYPENAME T вне класса шаблона
template <typename T>
class PersistentVector : PersistentObject
{
private:
std::vector<T> values;
public:
virtual void read();
Теперь, как бы я идти об определении чтения() вне класса, если он должен знаете имя типа T?
Первая попытка:
void PersistentVector::read()
{
// How can I get the iterator type?
typedef std::vector<T>::iterator it_type; // vector cannot be resolved
}
Вторая попытка:
// error: Member declaration not found
template <typename T>
void PersistentVector::read()
{
typedef std::vector<T>::iterator it_type; // no error
}
Вы действительно должны получить сообщение об ошибке во второй попытке. Вам нужно «typename». Возможно, ваш компилятор не соответствует требованиям. – juanchopanza
'typedef typename std :: vector :: iterator it_type;' - выглядит как @juanchopanza избили меня к нему :-) –
Это шаблонная функция, которую вы хотите использовать, вам нужно либо переместить тело в заголовок, либо объявить типы, которые вы хотите явно использовать в файле cpp –