Является ли частичная специализация шаблона класса ответом на эту проблему проектирования?

Скажем, у вас есть класс, который занимается подключением к удаленному серверу. Я хочу абстрагировать этот класс для предоставления двух версий, одна из которых подключается через UDP, а другая - через TCP. Я хочу создать наименьший возможный код времени выполнения и вместо использования полиморфизма я рассматриваю шаблоны. Вот что я представляю, но я не уверен, что это лучший способ сделать это:

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;
};

Таким образом, конечным преимуществом является то, что универсальность T по-прежнему доступна, но совершенно другой код, необходимый для настройки соединения UDP или TCP, был специализированным. Я полагаю, что вы можете поместить его оба в один класс или предоставить другой класс, который придерживается какого-то чисто виртуального интерфейса для настройки сетевого подключения, такого как IConnectionManager.

Но это оставляет проблему кода для универсального T, который теперь нужно записывать и поддерживать в обеих специализированных версиях, где они в конечном итоге одинаковы. Как лучше всего это решить? У меня такое чувство, что я все об этом говорю неправильно.

Ответы на вопрос(4)

Ваш ответ на вопрос