Saya ingin melakukan ini:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
tapi saya tidak bisa karena something_relevant
itu bukan tipe integral. Itu tidak bergantung pada T
, tetapi kode yang ada tergantung padanya menjadi anggota statis S
.
Karena S adalah templat, saya tidak bisa memasukkan definisi di dalam file yang dikompilasi. Bagaimana saya mengatasi masalah ini?
std::string
mengetikJawaban:
Cukup tentukan di header:
Karena ini adalah bagian dari templat, karena dengan semua templat kompiler akan memastikan itu hanya ditentukan sekali.
sumber
<goes_playing>
Wow, ketika saya mengarahkan kursor ke nama Anda, saya melihat perwakilan Anda! Saya juga tidak tahu itu. @Prasoon: Tidak, Anda benar, saya berulang tiba di tempat itu sekarang. (Itu sebabnya saya memilih jawaban Anda, BTW.)Sejak C ++ 17, Anda sekarang dapat mendeklarasikan anggota statis menjadi
inline
, yang akan menentukan variabel dalam definisi kelas:langsung: https://godbolt.org/g/bgSw1u
sumber
Ini akan bekerja
sumber
template<typename T> double S<T>::something_relevant=1.5;)
kesalahan melempar kompiler. Bisakah Anda memberi tahu saya apa alasannya?