J'utilise std::vector<int>
pour les deux types d'information. Je veux être sûr que je n'ai pas accidentellement mélanger les deux utilisations.
En bref, je veux quelque chose comme ce morceau de code à l'échec:
#include <vector>
using A = std::vector<int>;
using B = std::vector<int>;
void fa(const A&);
void fb(const B&);
void fun()
{
A ax;
B bx;
fa(bx);
fb(ax);
}
Ce code compile, même si fa
attend un argument de type A
.
De toute évidence, A
et B
sont identiques.
Quelle est la manière la plus simple de ce code compile correctement:
fa(ax);
fb(bx);
et faire de ce code échouer:
fa(bx);
fb(ax);
Bien sûr, je peux enrouler std::vector<int>
dans une autre classe, mais alors je vais avoir besoin de réécrire son interface. Sinon, je pourrais hériter d' std::vector<int>
, mais cela est souvent découragé.
En bref, j'ai besoin de deux versions incompatibles de std::vector<int>
.
MODIFIER
Il a été suggéré que la Forte typedefs peut résoudre ce problème. Ce n'est que partiellement vrai. Si j'utilise BOOST_STRONG_TYPEDEF(std::vector<int>, A)
, j'ai besoin d'ajouter un peu ennuyeux jette. Par exemple, au lieu de
A ax{1,3,5};
J'ai besoin d'utiliser
A ax{std::vector<int>{1,3,5}};
Et au lieu de
for (auto x : ax) ...
J'ai besoin d'utiliser
for (auto x : (std::vector<int>)ax) ...