Вы должны определить константу в исходном файле, а не заголовок (поэтому он определяется только один раз), так как это шаблон, который нужно сохранить в заголовке (и все экземпляры имеют одинаковое значение), вы можете использовать общийбазовый класс.
class ListBase {
protected:
ListBase() {} // use only as base
~ListBase() { } // prevent deletion from outside
static const double TRIM_THRESHOLD;
};
template <class T>
class List : ListBase {
};
// in source file
double ListBase::TRIM_THRESHOLD = 0.8;
Другой вариант - использовать его в качестве статической функции:
static double trim_threashold() { return 0.8; }
Редактировать: Если ваш компилятор поддерживает C ++11 вы делаете свой метод static
функцией constexpr
, чтобы он имел все возможности оптимизации, которые имеет непосредственное использование значения.