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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Cependant je veux cacher la politique que j'utilise, de sorte que mon logiciel puisse appeler le NetworkSerializer sans en connaitre la politique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part NetworkSerializer<MyNetworkSerializationPolicy> ns;
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