Estoy tratando de crear una clase de vector de bits en C++ para modelar hardware. En la mayoría de las HDL (descripción hardware Langauges) que conozco, bits específicos son referenciados como esto:¿Cómo puedo "anular" [] para aceptar dos argumentos en C++?
my_vector[bit_position]
y sub-vectores están referenciados como esto:
my_vector[msb:lsb]
o
my_vector[msb,lsb]
Quiero ser capaz de hacer algo similar con mi clase de vector de bits. ¿Hay alguna manera de decirle a operator[]
que acepte dos argumentos?
Las alternativas que he consideradas son:
usando un método
range
:my_vector.range(msb,lsb)
utilizando una cadena y analizarlo:
my_vector["msb:lsb"]
Pero ninguno de ellos es atractivo. El primero, porque es muy diferente de la forma en que está modelado en HDL, el segundo porque no me gusta trabajar con cadenas cuando no es necesario, y parece poco elegante.
¿Cuál es la mejor manera de hacerlo?
¿Cómo te sientes acerca de la sintaxis my_vector <1,2>? –
@Eric: está bien. ¿Cómo voy a hacer eso? ¿Eso no requiere una definición de plantilla? –
-1 para implementar cosas "geniales". Compre una copia del estándar C++ y léalo. (por ejemplo, ISO/IEC 14882: 2003, ch 13.5.5: operator [] debe ser una función miembro no estática con exactamente un parámetro). No podrá "simular" toda la sintaxis de VHDL en C++, entonces, ¿por qué no usar métodos (debería darle +1 para considerar la alternativa 1 :-)). También buenas lecturas en este contexto son: http://mindprod.com/jgloss/unmain.html y http://www.parashift.com/c++faq-lite/coding-standards.html#faq-27.14 –