Variadic template policy et polymorphisme
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.
Code:
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:
Code:
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.