Linux C ++: Как правильно использовать специализации шаблонов для нескольких файлов?

У меня странная проблема. В Windows, с Visual Studio 2010, а также с компилятором Intel все связано должным образом. Но когда я пытаюсь скомпилировать свой код с помощью CLang 3.0 в Linux, он компилируется (и если я использую только один файл CPP, он также связывается и запускается), но не связывается.

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

 template<class T> void myFunc(T in) { }
 template<> void myFunc<int>(int in) { }

Теперь из компоновщика Linux я бы получил что-то вроде:

«file xyz»: множественное определение «myFunc (int in ) ", сначала определенная в" некотором файле ".

Но как мне предотвратить это? Поскольку он работает в Windows, я полагаю, он должен как-то работать и в Linux?

То же самое и со статическими элементами данных шаблона, которые более или менее идентичны описанным выше, только вы объявляете переменную вместо функции. Я бы предпочел, чтобы это работало для статических элементов данных шаблона.

Если все остальное не помогло, я полагаю, я все еще мог бы создать файл "MakeAll.cpp", который просто включает все существующие CPP, но для меня это не кажется желательным решением ...

Спасибо за вашу помощь !

5
задан thesaint 23 January 2012 в 12:46
поделиться