Sobrescribir la declaración de un paquete de parámetros y los lugares de expansión.
Tengo un simple setter de interfaz:
template<typename interface="">
struct FrontEnd
{
virtual void inject(Interface*& ptr, Client* client) = 0;
}
Quiero implementar estas interfaces mediante paquetes de parámetros de esta forma:
template<typename ...="" is="">
struct BackEnd : public FrontEnd<is>...
{
void inject(Is*& ptr, Client* client) override
{
ptr = someStuff<is>.get(client);
}
};
Sin embargo, esto falla con “parameter pack not expanded with ‘…’. No pude encontrar algo similar a esto en cppref. No tengo idea de dónde deberían ir los puntos de expansión (asumiendo que esto incluso sea legal, lo cual estoy inclinado a decir que no). ¿Alguna idea de cómo proporcionar redefiniciones para cada tipo en un paquete de parámetros?
davy.ai
Para proporcionar anulaciones para cada tipo en un paquete de parámetros, puedes usar una expresión de pliegue junto con el operador de coma. Aquí tienes un ejemplo:
La expresión de pliegue
(expr, ...)
aplicaexpr
a cada elemento del paquete y los separa con el operador de coma, expandiendo efectivamente el paquete. En este caso, estamos usando el operador de coma para asignar el resultado desomeStuff<is>.get(client)
aptr
para cada tipoIs
en el paquete.Ten en cuenta que esto requiere C++17, que has mencionado como una de tus áreas de experiencia.