J'essaye de créer une classe de vecteur de bits en C++ pour modéliser du matériel. Dans la plupart des HDL (la description du matériel Langauges) que je connais, des bits spécifiques sont référencés comme ceci:Comment puis-je "remplacer" [] pour accepter deux arguments en C++?
my_vector[bit_position]
et les sous-vecteurs sont référencés comme ceci:
my_vector[msb:lsb]
ou
my_vector[msb,lsb]
Je veux être capable de faire quelque chose de similaire avec ma classe de bit-vector. Est-il possible de dire operator[]
pour accepter deux arguments?
Les alternatives que j'ai pris en compte sont les suivants:
en utilisant une méthode
range
:my_vector.range(msb,lsb)
en utilisant une chaîne et l'analyser:
my_vector["msb:lsb"]
Mais ni l'un ni l'autre n'est attrayant. Le premier, parce qu'il est trop différent de la façon dont il est modélisé en HDL, le second parce que je n'aime pas traiter avec des cordes quand je n'ai pas à le faire, et cela semble inélégant.
Quelle est la meilleure façon de faire cela?
Que pensez-vous de la syntaxe de mon_vector <1,2>? –
@Eric: c'est bien. comment pourrais-je faire cela? Cela ne nécessite-t-il pas une définition de modèle? –
-1 pour la mise en œuvre de choses «cool». Achetez une copie du standard C++ et lisez-le. (par exemple, ISO/CEI 14882: 2003, chapitre 13.5.5: l'opérateur [] doit être une fonction membre non statique avec exactement un paramètre). Vous ne serez pas capable de "simuler" toute la syntaxe de VHDL en C++, alors pourquoi ne pas utiliser les méthodes (je devrais vous donner +1 pour considérer l'alternative 1 :-)). Aussi de bonnes lectures dans ce contexte sont: http://mindprod.com/jgloss/unmain.html et http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.14 –