我想将模板参数包展开成二维数组,但不知道如何实现
因为矩阵类的元素通常都是浮点小数,但是只有C++20之后的语法才支持这个
template<int Row, int Col, typename T = float>
struct MATRIX
{
template<T... Args>
MATRIX(Args... nums) : aNumbers{ (nums, 0)... }// this is error
{
//aNumbers = { (nums, 0)... };
}
T aNumbers[Row][Col];
我尝试了几种语法,但没有一个能够编译。我想实现一个可变长度模板参数的构造函数
//这是错误MATRIX(Args... nums) : aNumbers{ (nums, 0)... }
问题在于
Args
是非类型模板参数(可变参数),因此您不能将其用作函数参数列表中的类型。换句话说,MATRIX(Args... nums)
是无效语法。
您需要决定元素是非类型模板参数(这需要 c++20)还是构造函数的普通参数。后者相当简单:
template<int Row, int Col, typename T = float>
struct MATRIX
{
template <typename...X>
MATRIX(X... nums) : aNumbers{ nums... }
{
}
T aNumbers[Row][Col];
};
int main() {
MATRIX<3,3,double> m{1.,2.,3.,4.,5.,6.,7.,8.,9.};
}
只是为了确保
X...
等于 T
,还需要一些额外的东西。不过,一次一步,我认为这超出了问题的范围。