Я пытаюсь создать класс бит-вектора в С++ для моделирования некоторого оборудования. В большинстве HDL (аппаратных описаниях langauges), которые я знаю, конкретные биты ссылаются следующим образом:
my_vector[bit_position]
и под-векторы ссылаются так:
my_vector[msb:lsb]
или
my_vector[msb,lsb]
Я хочу иметь возможность сделать что-то подобное с моим классом бит-вектора. Есть ли способ сообщить operator[]
принять два аргумента?
Альтернативы, которые я рассмотрел, следующие:
-
с помощью метода
range
:my_vector.range(msb,lsb)
-
используя строку и разбор ее:
my_vector["msb:lsb"]
Но ни один из них не привлекателен. Во-первых, потому что он слишком отличается от того, как он моделируется в HDL, второй, потому что мне не нравится иметь дело со строками, когда мне это не нужно, и это кажется неэлегантным.
Какой лучший способ сделать это?