我正在寻找初始化矩阵的推导指南。
我试图使用pack in pack和sizeof...
,initializer_list<initializer_list<T>>
,用于数组的自定义类进行构造,但是没有任何效果...
所以,我正在寻找初始化
template <class T, size_t s1, size_t s2>
class matrix
{
T matr[s1][s2]; //maybe with custom array class, if this problem need this
public:
//constructor
};
//deductor
喜欢
matrix m{{1, 2}, {1, 2}};
或者
matrix m({1, 2}, {1, 2});
最佳答案
我找到了避免使用其他括号的方法。
这段时间还需要一个明确的演绎指南,SFINAE和初始化matr
成员的其他方法,但应该可以。
以下是一个完整的完整示例
#include <iostream>
template <typename T, std::size_t s1, std::size_t s2>
class matrix
{
private:
T matr[s1][s2];
void init_row (std::size_t i, T const (&arr)[s2])
{
for ( auto j = 0u ; j < s2 ; ++j )
matr[i][j] = arr[j];
}
public:
template <std::size_t ... Dims,
std::enable_if_t<sizeof...(Dims) == s1, bool> = true,
std::enable_if_t<((Dims == s2) && ...), bool> = true>
matrix (T const (&...arrs)[Dims])
{ std::size_t i = -1; (init_row(++i, arrs), ...); }
};
template <typename T, std::size_t Dim0, std::size_t ... Dims,
std::enable_if_t<((Dim0 == Dims) && ...), bool> = true>
matrix (T const (&)[Dim0], T const (&...arrs)[Dims])
-> matrix<T, 1u+sizeof...(Dims), Dim0>;
int main()
{
matrix m{{1, 2}, {1, 2}, {1, 2}};
static_assert( std::is_same_v<decltype(m), matrix<int, 3u, 2u>> );
}
关于c++ - 矩阵的推导,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57903009/