Я пишу универсальный матричный класс на С ++. Я хочу иметь возможность инициализировать матрицу из двумерного двойного массива. Поскольку я использую шаблоны и поэтому размеры матриц должны быть известны во время компиляции, я хочу убедиться, что в массив можно передать только массивы заданного размера. Выражено в коде это:
template<unsigned int M, unsigned int N>
class Matrix {
public:
Matrix(double (&values)[M][N]);
}
Теперь вот странная часть: как и ожидалось, следующий код работает как шарм:
double arr [3][3] = { {1,2,3},
{1,2,3},
{1,2,3} };
Matrix<3,3>* mat3x3p = new Matrix<3,3>(arr);
Но при анонимной передаче массива код нарушается:
Matrix<3,3>* mat3x3p = new Matrix<3,3>({ {1,2,3},
{1,2,3},
{1,2,3} });
То же самое относится и к строительству через назначение.
Точное сообщение об ошибке:
no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘double (&)[3][3]’