создание экземпляра шаблона c ++ и typedef (gcc) - PullRequest
4 голосов
/ 20 декабря 2011

Я пытаюсь создать экземпляр шаблона извне, но я бы хотел использовать typedef в предложении создания экземпляров.Я думаю, что пример говорит более тысячи слов:

typedef myTemplate_base<commonValue> myTemplate; //in 99% of the cases I use this so I want a shorthand
extern template class myTemplate; //wont work/compiler error class infront of typedef

Я получаю ту же ошибку, если пытаюсь создать экземпляр шаблона следующим образом:

template class myTemplate;

Я знаю, что могу написать (extern) template class myTemplate_base<commonValue> вместо этого, однако я думаю, что это уродливее, так как мне нужно отрегулировать мое общее значение в 3 местах вместо одного.

Итак, как мне это выразить, чтобы использовать typedef в объявлении extern /инстанцирование?

Я использую gcc 4.6.1 на Ubunutu

Ответы [ 2 ]

8 голосов
/ 20 декабря 2011

typedef-name нельзя использовать в явном экземпляре.

От 14.7.2 / 3

Если явное создание экземпляра для класса или класса-члена, уточненный спецификатор типа в объявлении должен включать простой шаблон-ID . Если явное создание экземпляра для функции или функция-член, unqualifiedid в объявлении template-id или, где могут быть выведены все аргументы шаблона, a template-name или operator-function-id . ...

2 голосов
/ 20 декабря 2011

Используйте constexpr или typedef для вашего общего значения. Тогда вам нужно только изменить общее значение один раз, и все явные экземпляры изменятся.

Это самое лучшее, что ты можешь сделать. Вам не разрешено делать явное создание экземпляра с использованием tyepdef имени.

...