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.

¿Cómo puedo restringir expresiones plegables con los requisitos/conceptos de C++ 20?

¿Cómo se restringen los tipos permitidos en las plantillas variádicas y la expresión de repliegue utilizando los conceptos de C++20?

Por ejemplo, supongamos que me gustaría restringir la siguiente expresión de repliegue para que solo admita tipos enteros, ¿cómo haría eso?

include & lt; string & gt;

include & lt; iostream & gt;

include & lt; concepts & gt;

usando el espacio de nombres std;

template & lt; typename… Args & gt; // requiere (is_integral & lt; Args & gt; :: value)
int sum(Args… args) { return (… + args); }
int main()
{
cout & lt; & lt; sum(1,2,3);
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para restringir los tipos permitidos en plantillas variádicas y expresiones de plegado utilizando los conceptos de C++20, podemos definir una restricción usando la palabra clave requires seguida del concepto deseado(s). En el ejemplo proporcionado, para restringir la función sum para que solo admita tipos enteros, podemos agregar el concepto std::integral a la restricción requires utilizando el operador && de la siguiente manera:

    c++
    template<typename... args=""> requires (std::integral<args> && ...)
    int sum(Args... args) { return (... + args); }

    Esto garantizará que todos los tipos pasados como argumentos a la función sum cumplan con el concepto std::integral, que incluye tipos como int, long, short, etc. Si se pasa cualquier tipo no entero como argumento, el código no se compilará.</typename…>

Comments are closed.