Как сделать 2 реализации конструктора по умолчанию в шаблонном классе Matrix
В шаблоне класса Matrix нужно реализовать 2 специализации (если это можно так назвать) конструкторов по умолчанию.
У меня есть класс Matrix
template <size_t N, size_t M, typename Field>
class Matrix { ... }
В нём мне нужно сделать 2 конструктора по умолчанию для случаев, когда M == N (матрица квадратная) тогда заполнить её как единичную, и когда M != N, тогда заполнить нулями. Не совсем понимаю, как "перегрузить этот конструктор, если работаем с шаблонными параметрами)
Я что-то слышал об enable_if, может он тут подойдет? :/
Matrix() {
for (size_t i = 0; i < N; i++) {
for (size_t j = 0; j < N; j++) {
if (i == j) {
vec[i][j] = Field(1);
}
else {
vec[i][j] = Field(0);
}
}
}
}
Ответы (2 шт):
Так не годится?
Matrix() {
for (size_t i = 0; i < N; i++)
for (size_t j = 0; j < M; j++)
vec[i][j] = Field(M == N && i == j);
}
Может быть просто поменять местами параметры и сделать один со значением по-умолчанию?
template <typename Field, size_t N, size_t M = N>
class Matrix { ... }
Добавлено:
Ну а в самом конструкторе, для реализации 2 способов заполнения использовать if constexpr
. Тут он прекрасно отработает.