шаблоны и typedef

У меня есть класс вроде:

 template<int DIMENSION, typename T> Vector { ... }  

Теперь я хочу конкретизировать typename и предоставить новый тип с помощью typedef. Таким образом, я нашел ответ на StackOverflow на странице C ++ typedef для частичных шаблонов

Я так сделал:

template < int DIMENSION> using VectorDouble= Vector<DIMENSION, double>;

Это не компилируется (ошибка C2988: нераспознаваемое объявление / определение шаблона). Это потому, что мой компилятор (Visual Studio 2008) этого не позволяет, или я что-то пропустил?

Спасибо.


person nbonneel    schedule 30.06.2011    source источник


Ответы (2)


Ответ, на который вы ссылаетесь, гласит:

Если у вас есть компилятор C ++ 0x / C ++ 1x

C ++ 1x еще не является актуальным, поэтому большинство компиляторов не поддерживают его функции. В частности, VC ++ 9.0 (VS2008) их почти не поддерживает. VC ++ 10 (VS2010) поддерживает некоторые функции, но я не знаю, является ли то, что вам нужно, одним из них.

person Etienne de Martel    schedule 30.06.2011
comment
К сожалению, это не так. Придется дождаться следующего релиза. - person Bo Persson; 30.06.2011
comment
хорошо - я не знал, что VC 2008 не имеет функций C ++ 0x / 1x. Спасибо! (Еще 9 минут на принятие ответа) - person nbonneel; 30.06.2011
comment
@WhitAngl: он действительно поддерживает некоторые из них, например перечисления с сильной областью видимости и некоторые вещи для синтаксического анализа угловых скобок. Только не это oe. - person Puppy; 30.06.2011

Определения типов шаблонов поддерживаются в следующем Стандарте, то есть, в основном, только действительно, действительно, действительно новые компиляторы поддерживают его. Даже новейший VS не поддерживает его, потому что, ну, он недостаточно новый, вот насколько новый C ++ 0x.

В C ++ 03 обычно используется структура.

template<int dimension> struct vector_double {
    typedef Vector<dimension, double> type;
};

Теперь к нему можно получить доступ как

int main() {
    vector_double<5>::type vec_double;
}
person Puppy    schedule 30.06.2011