предположим, у меня есть файл alpha.h:
class Alpha {
public:
template<typename T> void foo();
};
template<> void Alpha::foo<int>() {}
template<> void Alpha::foo<float>() {}
Если я включу alpha.h в несколько файлов cpp и скомпилирую с GCC 4.4, он будет жаловаться, что существует несколько определений foo<int>
иfoo<float>
для нескольких объектных файлов.Это имеет смысл для меня, поэтому я изменяю последние две строки на:
template<> extern void Alpha::foo<int>() {}
template<> extern void Alpha::foo<float>() {}
Но тогда GCC говорит:
явная специализация шаблона не может иметь класс хранения
хорошо ... так как я должен делать это правильно?Я беспокоюсь, что C ++ не позволяет в первую очередь то, что я пытаюсь сделать, и в таком случае есть ли хорошая идиома, которая будет выполнять то же самое?