【发布时间】:2022-01-04 17:56:02
【问题描述】:
我想从两个参数包中获取一个矩阵,如下所示:
template < typename T1, typename T2 > struct Multi{};
template < int ... n > struct N{};
void Print( int n ){ std::cout << n << std::endl; }
template < int ... n1, int ... n2 >
struct Multi< N<n1...>, N<n2...>>
{
Multi()
{
using expander = int[];
// No idea which syntax should be used here:
expander{ 0,((void)Print(n1...*n2),0)... };
}
};
int main()
{
Multi< N<1,2,3,4>, N< 10,20> >{};
}
结果应该是
10 20 30 40 20 40 60 80
我该怎么做?
【问题讨论】:
-
@S.M.这在部分专业化中是允许的。
-
@S.M.在专业化中允许...适用于当前的 gcc。怎么了?
-
::std::integer_sequence可以用来代替N。部分特化中模板参数包中的数字可以打包到数组中/使用fold expression 打印。我不知道为什么Mirror在这里。 -
根据您的需要,在 range-v3 中使用
views::cartesian_product可能会更清晰、更自然。据我了解,完全是constexpr。
标签: c++ templates parameter-pack