Ошибка компоновщика при использовании внешнего шаблона

У меня есть рабочий код с шаблоном. Подобно stl :: string, я в основном использую свой шаблон с одним параметром в нескольких единицах компиляции. Чтобы сэкономить время, я пытаюсь использовать extern instantiation . Однако изменение строк следующим образом приводит к ошибке. Как правильно это делать? (P.S. Компиляция на gcc с флагом c ++ 0x)

typedef myTemplate_base<commonType> myTemplate;
extern template class myTemplate_base<commonType>; //using "extern template myTemplate" wont work

Я добавил в проект дополнительный файл cpp со следующим.

template class myTemplate_base<commonType>;

Компоновщик выдает это сообщение об ошибке (указав строку первого экземпляра объекта ( myTemplate someVar; ) в основном файле как источник ошибки):

undefined reference 'myTemplate_base :: ~ myTemplate_base () '

Однако этот тип находится в классе со следующим определением ~ myTemplate () = default;

Изменить: Если у вас есть лучший заголовок, пожалуйста, прокомментируйте, так что правильный люди взглянут на это

Edit2: Есть забавная вещь, добавление класса шаблона myTemplate_base значительно увеличивает размер исполняемого файла (+ 100 КБ для двоичного файла 450 КБ), хотя шаблон используется в основном (для компиляции я должен закомментировать часть extern ). Это намекает на то, что компоновщик хранит две реализации шаблона с одним и тем же экземпляром / я что-то упускаю.

5
задан deft_code 19 December 2011 в 23:47
поделиться