¿Es la especialización de plantilla de clase parcial la respuesta a este problema de diseño?
Digamos que tiene una clase cuyo trabajo es conectarse a un servidor remoto. Quiero abstraer esta clase para proporcionar dos versiones, una que se conecta a través de UDP y la otra a través de TCP. Quiero construir el código de tiempo de ejecución más ágil posible y en lugar de usar polimorfismo, estoy considerando plantillas. Esto es lo que estoy imaginando, pero no estoy seguro de que sea la mejor manera de hacerlo:
class udp {};
class tcp {};
template<class T,typename X>
class service
{
private:
// Make this private so this non specialized version can't be used
service();
};
template<typename X>
class service<udp, X>
{
private:
udp _udp;
X _x;
};
template<typename X>
class service<tcp, X>
{
private:
tcp _tcp;
X _x;
};
Por lo tanto, el beneficio final es que el carácter genérico de T todavía está disponible, pero se ha especializado el código muy diferente requerido para configurar una conexión UDP o TCP. Supongo que podría poner ambos en una clase o proporcionar otra clase que se adhiera a alguna interfaz virtual pura para configurar la conexión de red, como IConnectionManager.
Pero esto deja el problema del código para que la T genérica ahora tenga que escribirse y mantenerse en ambas versiones especializadas, donde finalmente son las mismas. ¿Cuál es la mejor manera de abordar esto? Tengo la sensación de que voy a hacer todo esto mal.