¿Se pueden expandir múltiples paquetes de parámetros en una sola expresión?
Quiero obtener una matriz a partir de dos paquetes de parámetros de la siguiente manera:
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 tengo idea de qué sintaxis debería usarse aquí:
expander{ 0,((void)Print(n1...*n2),0)... };
}
};
int main()
{
Multi< N<1,2,3,4>, N< 10,20> >{};
}
El resultado debería ser:
10 20 30 40 20 40 60 80
¿Cómo puedo hacer esto?
davy.ai
Para obtener una matriz a partir de dos paquetes de parámetros, podemos utilizar un bucle anidado para iterar a través de cada par de elementos de los dos paquetes y realizar la operación deseada en ellos. En el código dado, necesitamos multiplicar cada elemento del primer paquete con cada elemento del segundo paquete.
Para lograr esto, podemos utilizar la expresión de plegado
(n1 * n2)...
dentro de otra expresión de plegado(..., (n1 * n2)...)
para generar una lista separada por comas de valores multiplicados. Luego necesitamos extraer cada valor de esta lista e imprimirlo utilizando la funciónPrint()
.El código corregido se vería así:
“`c++ struct Multi{};
template
template <int… n=””> struct N{};
void Print(int n) { std::cout << n << ” “; }
template <int… n1,=”” int…=”” n2=””>
struct Multi<><n1…>, N<n2…>> {
Multi() {
using expander = int[];
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
“`</n<1,2,3,4></n2…></n1…></int…></int…>