我有一個簡單的矩陣類,看起來像這樣啓用功能:根據模板類變量
template <int m, int n>
class matrix {
public:
std::enable_if<std::is_same<matrix, matrix<4,4>>::value, void>
translate(float x, float y, float z) {
// Do stuff
}
private:
float mat[m * n];
};
我預計std::enable_if
使功能僅當我實例化一個matrix<4,4>
,但現在看來,這就是錯誤。
int main() {
matrix<4, 3> mat3;
mat3.translate(1.0f, 1.0f, 1.0f);
return 0;
}
上面的代碼編譯沒有錯誤。我究竟做錯了什麼?
我知道我可以簡單地把static_assert(m == 4 && n == 4)
放在函數體中,但我正在尋找一個更乾淨的解決方案,並希望在過程中學習一些關於模板的知識。
您可以使用'#ifdef'和其他C預處理器去除或添加功能,具體取決於模板參數 – dchhetri
@ user814628:嗯,不,你不能。預處理在模板擴展之前發生。 –
你是對的,我只是在做白日夢... – dchhetri