Я хотел бы сделать это:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
но я не могу, потому что something_relevant
это не цельный тип. Это не зависит от T
, но существующий код зависит от того, является ли он статическим членом S
.
Поскольку S является шаблоном, я не могу поместить определение в скомпилированный файл. Как мне решить эту проблему?
std::string
типуОтветы:
Просто определите это в шапке:
Поскольку он является частью шаблона, как и во всех шаблонах, компилятор будет гарантировать, что он определен только один раз.
источник
<goes_playing>
Ух ты, когда я наведу курсор на твое имя, я вижу твоего представителя! Я тоже этого не знал. @Prasoon: Нет, вы правы, я итеративно пришел туда, где он сейчас. (Вот почему я проголосовал за ваш ответ, кстати.)Начиная с C ++ 17, теперь вы можете объявить статический член
inline
, который будет определять переменную в определении класса:в прямом эфире: https://godbolt.org/g/bgSw1u
источник
Это будет работать
источник
template<typename T> double S<T>::something_relevant=1.5;)
ошибку, вызванную компиляцией. Можете ли вы сказать мне, в чем причина?