我想在一個頭文件中轉發聲明變量模板,然後在單獨的編譯單元中有實際的實例。無法聲明模板變量而不定義它
我被帶到相信C++ 14變量模板非常像靜態類變量那樣操作。不幸的是,這似乎並不是這樣,它阻止了我向前聲明我的變量模板。
template <typename T> struct Variable {
static int variable;
};
template <typename T>
extern int variable;
int main() {
(void) Variable<char>::variable;
// (void) variable<char>; // <-- line 10
}
template <> int Variable<char>::variable = 42;
template <> int variable<char> = 23;
上面的代碼示例在GCC下編譯並按原樣運行。但取消註釋第10行給出了編譯時錯誤:
specialization of 'variable<char>' after instantiation
template <> int variable<char> = 23;
^
Clang拒絕這兩個。這是不合格的NDR。顯式*實例化*和顯式*特化*是完全不同的野獸。 –
好的 - 那麼怎麼做*我完成了我想要的 - 即在頭文件中聲明變量,但在.cpp中定義它? –