我是C++新手,正在学习中。我有一个矩阵定义类型:
using Matrix = std::array<std::array<T, COL>, ROW>;
我可以"手动"初始化一个 constexpr 矩阵
constexpr Matrix<int, 2,2> mat{ {
{{ 1,2 }},
{{ 3, 4 } }
}};
这对于 ROW,COL 的大型示例是不可行的。相反,我想用函数"以编程方式"(即通过循环或类似方式)初始化它fill_entry
以便mat[i][j]
取值fill_entry(i,j)
,fill_entry
是这样的
template<T>
constexpr T fill_entry(T This_object_has_type_T,int i , int j).
正确的方法是什么?我使用 C++17
您可以使用立即调用的 lambda:
constexpr auto mat = []() {
Matrix<int, 2, 2> result{};
int value = 1;
for (std::size_t i = 0; i < result.size(); ++i) {
for (std::size_t j = 0; j < result[0].size(); ++j) {
result[i][j] = value;
++value;
}
}
return result;
}();
如果你需要像这样初始化多个变量,你可以把它做成一个函数:
template<typename T, std::size_t Rows, std::size_t Cols>
constexpr Matrix<T, Rows, Cols> create_mat() {
Matrix<T, Rows, Cols> result{};
int value = 1;
for (std::size_t i = 0; i < result.size(); ++i) {
for (std::size_t j = 0; j < result[0].size(); ++j) {
result[i][j] = static_cast<T>(value);
++value;
}
}
return result;
}
并称其为create_mat<int, 2, 2>()
.