come procedere utilizzando il confronto di parametri modello non di tipo in un std::enable_if
? Non riesco a capire come farlo di nuovo. (Una volta ho funzionato, ma non riesco a trovare il post in cui ho trovato la risposta.)std :: enable_if con parametri modello non di tipo
Grazie in anticipo per qualsiasi aiuto su questo argomento.
template<int Width, int Height, typename T>
class Matrix{
static
typename std::enable_if<Width == Height, Matrix<Width, Height, T>>::type
Identity(){
Matrix ret;
for (int y = 0; y < Width; y++){
elements[y][y] = T(1);
}
return ret;
}
}
Edit: fisso staffa mancante come sottolineato nei commenti.
Probabilmente userei un 'static_assert' per quello. Fornisce messaggi di errore chiari. – chris
'static_assert' è davvero lo strumento giusto:' std :: enable_if' è per SFINAE e non c'è SFINAE possibile per un membro non template di un modello di classe. –
Ho pensato di usare 'static_assert', in definitiva potrei finire per usarlo. Ma prima ho funzionato e, con il vantaggio dell'auto-complete, non ho nemmeno elencato la funzione per le matrici non quadrate. In gran parte a questo punto però, sta cercando di capire come ho fatto una volta questo con rigorosamente 'std :: enable_if'. – LostOfThought