jak byś poszperał przy użyciu porównywania parametrów szablonów nie typu w std::enable_if
? Nie mogę wymyślić, jak to zrobić ponownie. (Kiedyś to działało, ale zgubiłem kod, więc nie mogę na nie spojrzeć i nie mogę znaleźć wpisu, na który znalazłem odpowiedź.)std :: enable_if Z parametrami szablonu bez szablonu
Z góry dziękujemy za pomoc ten temat.
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: Poprawiono brakujący nawias jak wskazano w komentarzach.
Prawdopodobnie użyłbym 'static_assert' do tego. Zapewnia wyraźne komunikaty o błędach. – chris
'static_assert' jest właściwym narzędziem:' std :: enable_if' jest dla SFINAE i nie ma możliwości SFINAE dla elementu szablonu szablonu, który nie jest szablonem. –
Myślałem o użyciu 'static_assert', ostatecznie mogę skończyć się go używać. Ale robiłem to już wcześniej i z przewagą funkcji automatycznego uzupełniania, nie wymieniając nawet funkcji macierzy innych niż kwadratowe. W dużej mierze w tym momencie próbuje dowiedzieć się, jak to kiedyś zrobiłem, używając 'std :: enable_if'. – LostOfThought