Desempaquetando el primer parametro del paquete de parametros de plantilla en c++.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.
” Soy nuevo con las plantillas, especialmente con el paquete de parámetros y me pregunto si puedo obtener el primer valor del paquete.
Por ejemplo, el siguiente código:
Template & amp;lt; typename T, typename … Args & amp;gt;
Bool register (Args … args) {
Si no es así, Foo & amp;lt; T & amp;gt; (args …)
afirmar(std::is_same_v<std::string, args…[0]>);
(std::cerr << "Llamada fallida Foo con " + args…[0] + "\n");
}
}
Realmente, ¿cómo obtengo el primer valor en args …?
Vale la pena señalar que args .. puede contener diferentes tipos (cadena, booleano, etc.) “
davy.ai
Para obtener el primer valor en
args...
, puedes usar el operador de indexación[]
con el índice0
. Por ejemplo, para afirmar que el primer argumento es de tipostd::string
, puedes usarstd::is_same_v<std::string, args...[0]="">
. De manera similar, para obtener el valor del primer argumento como unastd::string
, puedes usarargs[0]
.Aquí está una versión actualizada del código con estos cambios:
`
`template <typename t,="" typename...="" args="">
bool registrar(Args... args) {
if (!Foo<t>(args...)) {
assert(std::is_same_v<std::string, args...[0]="">);
std::cerr << "Falló la llamada a Foo con " + std::string(args[0]) + "\n";
}
}
Tenga en cuenta que necesitamos convertir
args[0]
astd::string
usando el constructor destd::string
para concatenarlo con unconst char*
.</std::string,></std::string,>