Bonjour,
J'ai un probl�me de conception et je s�che un peu. Peut �tre avez vous une petite id�e ou piste pour m'aider.
Je cherche une solution �l�gante pour cacher l'impl�mentation r�seau que j'utilise dans mon logiciel.
J'utilise des variadic template et une politique qui me permet de choisir de quelle fa�on je vais s�rialiser mes objets et de ne pas m�inqui�ter du nombre de membre.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
template<typename SerializePolicy>
class NetworkSerializer
{
public:
template<typename T, typename... Arguments>
void serialize(T pValue)
{
static_cast<SerializePolicy*>(this)->serializeStrategy(pValue);
}
template<typename T, typename... Arguments>
void serialize(T pValue, Arguments... pArgs)
{
static_cast<SerializePolicy*>(this)->serializeStrategy(pValue);
serialize(pArgs...);
}
template<INetworkObservable*, typename... Arguments>
void serialize(INetworkObservable* pNetObs)
{
static_cast<SerializePolicy*>(this)->serializeStrategy(pNetObs);
}
template<INetworkObservable*, typename... Arguments>
void serialize(INetworkObservable* pNetObs, Arguments... pArgs)
{
static_cast<SerializePolicy*>(this)->serializeStrategy(pNetObs);
serialize(pArgs...);
}
}; |
Je suis oblig� d'�crire:
NetworkSerializer<MyNetworkSerializationPolicy> ns;
Cependant je veux cacher la politique que j'utilise, de sorte que mon logiciel puisse appeler le NetworkSerializer sans en connaitre la politique.
Je ne pense pas pouvoir utiliser des type erasure puisque mes fonctions sont templat�s et que j'utilise des traits pour faire de la sp�cialisation partielle dans l'impl�mentation des policy, ou alors je suis pass� � cot� de quelque chose.
Une aide serait la bienvenue.
Merci.
Partager