Повторяющиеся символы с реализацией только заголовка
У меня есть класс C ++, который объявлен и реализован в заголовочном файле. Я выбрал это, потому что нельзя легко перемещаться между сборками Debug и Release из-за_GLIBCXX_DEBUG
и предварительно скомпилированные библиотеки. Например, если я определю_GLIBCXX_DEBUG
, Boost завершится сбоем из-за изменений ABI в исходных файлах.
Реализация только заголовка создала проблему с дублирующимися символами. Например, в классе нижеoperator==
и не членswap
будет производить несколько определенных символов.
// Foo.hpp
namespace Bar
{
template
class Foo
{
...
};
bool operator==(const Foo& a, const Foo& b) {
..
}
}
namespace std
{
template
void swap(Bar::Foo& a, Bar::Foo& b)
{
a.swap(b);
}
}
Когда объявление и реализация были разделены, файлы (Foo.hpp и Foo.cpp) скомпилированы и соединились.
Какой трюк, чтобы заставить это правильно скомпилировать и связать?