-
Notifications
You must be signed in to change notification settings - Fork 16
/
tuple.txt
98 lines (84 loc) · 5.73 KB
/
tuple.txt
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
86
87
88
89
90
91
92
93
94
95
96
97
98
TUPLE
HEADER ==> #<boost/tuple/tuple.hpp>
tuple <WVAR...> #Un tuple est un container de taille fixe, pouvant
#accueillir des éléments de type différents, et dont le
#type est fixé par le template <WVAR...>.
#WVAR peut être tout type. Il peut y avoir jusqu'à 10
#WVAR, mais comme WVAR peut être un autre tuple, cette
#limite peut être augmentée.
TUPLE([WVAL...]) #Construit un TUPLE avec chaque WVAL devant être du type
#du WVAR correspondant dans le template. Il peut y avoir
#moins de WVAL que de WVAR dans le template : le
#constructor par défaut est alors utilisé.
TUPLE(TUPLE2) #TUPLE2 doit avoir le même template ou les types du
TUPLE = TUPLE2 #template doivent pouvoir être convertis.
#Une std::pair peut être converti implicitement en
#TUPLE de dimension 2.
TUPLE.get<INT_VAL>() #Renvoie l'élément numéro INT_VAL (index commence à 0)
#du TUPLE.
#Disponible aussi sous la forme :
# - get<INT_VAL>(TUPLE)
TUPLE.head #Est le premier élément du TUPLE.
TUPLE.tail #Un TUPLE2 contenant tous les éléments de TUPLE, sauf le
#premier.
tuples::length #Est le nombre d'éléments contenus dans WVAR, qui est un
<WVAR>::value #type tuple <...>
tuples::element #Renvoie un typedef depuis le type de l'élément numéro
<INT_VAL, WVAR>::type #INT_VAL du tuple dont le type est WVAR.
TUPLE::head_type #Est un typedef depuis le type de TUPLE::head
TUPLE::tail_type #Est un typedef depuis le type de TUPLE::tail
HEADER ==> #<boost/tuple/tuple_comparison.hpp>
TUPLE == TUPLE2 #TUPLE et TUPLE2 doivent être de même taille avec des
TUPLE != TUPLE2 #éléments comparables. Renvoie true ou false si
#l'ensemble des éléments sont égaux, ou si juste un seul
#diverge.
TUPLE < TUPLE2
TUPLE <= TUPLE2
TUPLE > TUPLE2 #Effectue une comparaison comme lorsque l'on compare
TUPLE >= TUPLE2 #deux STR : d'abord le premier élément, etc.
HEADER ==> #<boost/tuple/tuple.hpp>
make_tuple(WVAL...) #Renvoie un TUPLE construit avec WVAL... Préférer cela
#car plus pratique. Les arguments du template du type
#de TUPLE sont automatiquement déduits.
#On peut utiliser boost::ref(WVAL) et boost::cref(WVAL)
#pour que les arguments soient référence ou const
#référence.
tie(WVAL...) #Comme make_tuple, sauf que les éléments sont par défaut
#englobés par ref(). Un tuple dont tous les éléments
#sont des références est un "tier".
#L'utilité principale est d'assigner les différents
#éléments d'un TUPLE2 temporaire (par exemple résultat
#d'une fonction) par référence à des variables
#individuelles, ce qui permet de les utiliser en dehors
#d'un TUPLE ("unpacking")
# - WVAR1 VAR1, WVAR2 VAR2;
# tie(VAR1, VAR2) = make_tuple(WVAL1, WVAL2);
#On peut ici utiliser VAR1 et VAR2 individuellement, qui
#sont initialisées à WVAL1 et WVAL2.
#Il est possible de remplacer certaines WVAL... données
#en argument à tie() par tuples::ignore, ce qui signifie
#qu'elles ne seront assignées à aucune variable
#individuelle.
HEADER ==> #<boost/tuple/tuple_io.hpp>
OSTREAM << TUPLE #Imprime sur OSTREAM :
# - OPENCHAR (par défaut '(')
# - chaque élément du TUPLE séparés par DELIM (par
# défaut " ")
# - ENDCHAR (par défaut ')')
ISTREAM >> TUPLE #Opère une succession d'extraction >> pour caser ISTREAM
#dans chaque élément du tuple. ISTREAM peut commencer ou
#terminer par OPENCHAR et ENDCHAR, qui seront skipped,
#et les éléments doivent être séparés par DELIM.
#Marche mal si TUPLE contient des STRING.
#Les manipulateurs suivants sont disponibles pour <<
#comme pour >> :
tuples::set_open #
(CHAR_VAL) #Modifie l'OPENCHAR pour ISTREAM ou OSTREAM
tuples::set_close #
(CHAR_VAL) #Même chose pour ENDCHAR
tuples::set_delimiter #
(CHAR_VAL) #Même chose pour DELIM
PORTABILITE ==> #Borland 5.5 ne peut pas instantier un TUPLE avec des
#FONC_ADR ou CLASSFK_ADR