Для целей ввода-вывода мне нужно связать с различными типами символьную строку.Для этого я создал шаблон класса names
, который специализирован для каждого типа, который мне нужно назвать.Вот заголовочный файл:
template<typename T>
class names {};
template<>
class names<Index> {
public:
static const std::string name;
};
template<>
class names<Integer> {
public:
static const std::string name;
};
И соответствующий исходный файл:
const std::string names<Index>::name = "Index";
const std::string names<Integer>::name = "Integer";
Index
и Integer
определены через typedef
:
typedef std::ptrdiff_t Index;
typedef int Integer;
Код компилируется и отлично работает на компьютерах macOS и Ubuntu, которые я использую.Однако на компьютере с Windows std::ptrdiff_t
определяется как int
.Затем я получаю следующую ошибку:
In file included from lib/mixt_MixtComp.h:22:0,
from dummy.cpp:5:
lib/LinAlg/names.h:28:7: error: redefinition of 'class mixt::names<int>'
class names<Integer> {
^
lib/LinAlg/names.h:22:7: error: previous definition of 'class mixt::names<int>'
class names<Index> {
^
Есть ли способ избежать этой ошибки?Я могу использовать C ++ 11.