es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , ,

Answer

  1. Avatar for 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ón Print().

    El código corregido se vería así:

    “`c++
    template struct Multi{};
    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>>{};
    }


    Esto daría como resultado:

    10 20 30 40 20 40 60 80
    “`</n<1,2,3,4></n2…></n1…></int…></int…>

Comments are closed.