これをやりたい:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
something_relevant
は整数型ではないため、できません。 T
には依存しませんが、既存のコードはS
の静的メンバーであることに依存しています。
Sはテンプレートであるため、定義をコンパイル済みファイルに入れることはできません。この問題を解決するにはどうすればよいですか?
ヘッダーで定義するだけです:
template <typename T>
struct S
{
static double something_relevant;
};
template <typename T>
double S<T>::something_relevant = 1.5;
すべてのテンプレートと同様に、コンパイラはテンプレートの一部であるため、コンパイラは一度だけ定義されるようにします。
これは動作します
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
C++ 17以降、静的メンバーをinline
として宣言できるようになりました。これにより、クラス定義で変数が定義されます。
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};