Использование объявлений в шаблонах C ++? - PullRequest
0 голосов
/ 26 июля 2010

В объявлении-шаблоне, явной специализации или явном создании список инициаторов-объявлений в объявлении должен содержать не более одного декларатора.Когда такое объявление используется для объявления шаблона класса, декларатор не допускается.

Кто-нибудь может объяснить это?

Для меня необходимо, чтобы мне нужно было проверить, что компиляторы следуют ISOстандарт?Это наш проект, пожалуйста, помогите мне?

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

В те времена, когда C был королем, обычно писали такой код:

struct { int x; int y; } pt1, pt2;

Этот код создает анонимную структуру и объявляет две переменные этого типа.

Стандарт, который вы цитируете, в основном говорит, что вы не можете сделать это для типов шаблонов. Таким образом, плохо сформировано следующее:

template <typename T> struct { T x; T y; } pt1, pt2;

Причина должна быть очевидна - у pt1 и pt2 нет полного типа - мы не знаем, что такое T, когда объявляем их.

Однако такой стиль объявления довольно редко встречается в C ++, так что это несколько несущественное ограничение.

2 голосов
/ 26 июля 2010

Это означает, что вы не можете написать

template <class T> class A{} a, b;

или аналогично

template <class T> A<T>::a=0, A<T>::b=1;

(представьте, что будет a, b в первом случае). Более подробное описание деклараторов см. В главе 8 стандарта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...