Ist eine Teilklassenspezialisierung die Antwort auf dieses Designproblem?

Sagen Sie, Sie haben eine Klasse, die eine Verbindung zu einem Remote-Server herstellen soll. Ich möchte diese Klasse abstrahieren, um zwei Versionen bereitzustellen, von denen eine über UDP und die andere über TCP verbunden ist. Ich möchte möglichst schlanken Laufzeitcode erstellen und anstelle von Polymorphismus überlege ich mir Vorlagen. Ich stelle mir Folgendes vor, bin mir aber nicht sicher, ob dies der beste Weg ist:

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

So ist der Endnutzen, dass die Generizität von T immer noch verfügbar ist, aber der sehr unterschiedliche Code, der zum Einrichten einer UDP- oder TCP-Verbindung erforderlich ist, wurde spezialisiert. Ich nehme an, Sie könnten beide in eine Klasse einordnen oder eine andere Klasse bereitstellen, die einer rein virtuellen Schnittstelle zum Einrichten der Netzwerkverbindung entspricht, z. B. IConnectionManager.

Aber das hat das Problem, dass der Code für das generische T jetzt in beiden Spezialversionen geschrieben und gepflegt werden muss, wo sie letztendlich gleich sind. Wie kann man das am besten angehen? Ich habe das Gefühl, dass ich das alles falsch mache.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage