如何扩展这个C++模板参数包

问题描述 投票:0回答:2

我想将模板参数包展开成二维数组,但不知道如何实现

因为矩阵类的元素通常都是浮点小数,但是只有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];

我尝试了几种语法,但没有一个能够编译。我想实现一个可变长度模板参数的构造函数

c++ templates c++20 metaprogramming
2个回答
0
投票

MATRIX(Args... nums) : aNumbers{ (nums, 0)... }
//这是错误

问题在于

Args
是非类型模板参数(可变参数),因此您不能将其用作函数参数列表中的类型。换句话说,
MATRIX(Args... nums)
是无效语法。


0
投票

您需要决定元素是非类型模板参数(这需要 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
,还需要一些额外的东西。不过,一次一步,我认为这超出了问题的范围。

© www.soinside.com 2019 - 2024. All rights reserved.