Скажите, что у вас есть класс, которому нужно подключиться к удаленному серверу. Я хочу отделить этот класс, чтобы предоставить две версии: одну, которая соединяется через 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 теперь должен был быть написан и поддерживаться в обеих специализированных версиях, где они в конечном счете одинаковы. Как лучше всего это решить? У меня такое чувство, что я все это делаю неправильно.