Bonjour,
Je me pose la question suivante:
J'ai une classe GenericTemplate qui utilise plusieurs types de données différentes.
Dans cette classe j'aimerai créer des classes Templates PartialTemplate1 et PartialTemplate2 qui ne traitent que certains type de données.
Sur l'appel de la méthode onfind de la class GenericTemplate, j'aimerai qu'en fonction du type de la donnée cela m'oriente vers l'appel de la class PartialTemplate1 ou PartialTemplate2.
Jusque la, OK. J'aurai pu le gérer mieux qu'avec un enum, mais c'est juste pour monter l'idée, ma question étant la possibilité ou l'impossibilité a utiliser des classes ne possédant pas les méthodes sur tous les types, et ne pas être obligé de déclarer un template et de ne specialiser que les cas qui m'intéresse dans chaque classe
Est il possible de n'avoir que les types qui m'intéresse pour leur traitement dans B et dans C sans être obligé de déclarer les types utilisé par l'autre classe ( et donc avoir des méthodes vides) ?
j'aimerai quelque chose du genre:
je vous remercie!
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 #include <iostream> #include <string> #include <cstdint> #include <vector> #include <cstdarg> #include <algorithm> class A { public: A() = default; ~A() = default; }; class B { public: B() = default; ~B() = default; }; class PartialTemplate1 { public: static void onFind(A value){}; }; class PartialTemplate2 { public: static void onFind(B value){}; }; //J'aimerai eviter de faire : /* class PartialTemplate2 { public: template<typename T> static void onFind(T value){}; template<> static void onFind(B value){}; }; */ class GenericTemplate { public: enum V_E { E_1, E_2 }; template<typename T> static void onFind(T value, V_E e) { switch(e) { case E_1: PartialTemplate1::onFind(value); break; case E_2: PartialTemplate2::onFind(value); break; default: break; } } }; int main() { A a; GenericTemplate::onFind(a, GenericTemplate::E_1); }![]()
Partager