Нам нужно сделать много операций с 8/16/32 битными (без знака) целыми числами, хранящимися в дополненной форме. Для этого у нас есть шаблон целочисленного класса с операторами, и из этого мы получаем несколько классов с подписанным и беззнаковым содержимым 8/16/32.
I: E: uint32_at
, uint32_bt
, int32_at
int32_bt
и др. c. где каждый экземпляр класса имеет внутреннюю переменную val
со значением.
Мы хотим иметь постоянные массивы такого объекта, но если мы определим:
const uint32_bt table[4096] = { uint32_bt(5), uint32_bt(17), ... };
, компилятор генерирует конструктор призыв к каждому элементу. Эффективный компилятор сгенерирует 4 x 4096 = 16 384 байта fla sh. Наш компилятор генерирует около 100 КБ fla sh и 16384 байта SRAM, так как он вызывает конструктор для создания каждого элемента.
Одна идея состоит в том, чтобы сгенерировать таблицу в C, а затем создать класс C ++ для полной таблицы.
const uint32_t CTable[4096] = { ... };
, а затем создайте экземпляр класса таблицы, передавая указатель и размер.
CPP_Table Table(4096, CTable);
This initiates two internal variables
tab = CTable
size = 4096
Затем оператор индекса вернет объект, который является просто ссылка на что-то в таблице C.
uint32B operator [] (
const uint32B& operator [] (const uint32_t index) const
{
return (somekindofcast)(&tab[size - index]);
}
Итак, вопрос в том, как преобразовать адрес, чтобы я мог вернуть ссылку на объект?