因爲人們不會以類似grep的方式閱讀和比較代碼,所以我立即指出這不是Template argument for non-type parameter must be an expression的重複,而是我在閱讀後想到的另一個代碼。因此,請將它作爲一個整體閱讀,不要只看類名。爲什麼模板不能通過模板參數「超載」?
template <typename T, int N>
struct Vector {
T data[N];
};
struct Dynamic {
};
template <typename T, Dynamic>
struct Vector {
T* data;
};
我想要兩個模板:一個接收編譯時整數,另一個接收用作標記的類型。
雖然無論因爲什麼原因,第二個模板將被解釋爲第一個模板的專業化(或重新定義?),但這不會起作用。
爲什麼無法通過模板參數對模板進行消歧?任何邏輯/編譯原因呢?
你可以繼續問,但你不會得到你想要的答案:-S語言不會讓你這樣做。 –
呃我只是好奇,對不起,如果這看起來像一個轉發。我只是不明白爲什麼模板重載(使用不同的參數類型,例如類型和非類型)將是一個壞主意 – Dean
毫無疑問,但這不是一個思考好主意的網站。 –