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

Respuestas a la pregunta(4)

Su respuesta a la pregunta