如何从绝对地址的C样式指针创建对C ++对象的引用

问题描述 投票:0回答:1

我们需要对以互补形式存储的8/16/32位(无符号)整数进行大量操作。为此,我们有一个带有运算符的模板整数类,并且从中我们得到具有带符号和无符号8/16/32内容的多个类。

I:E:uint32_atuint32_btint32_atint32_bt等。其中每个类实例都有一个内部变量val及其值。

我们想要具有此类对象的常量数组,但是如果我们定义:

const uint32_bt table[4096] = { uint32_at(5), uint32_at(17), ... };

编译器会为每个元素生成一个构造函数调用。一个高效的编译器将生成4 x 4096 = 16,384字节的闪存。我们的编译器生成约100kB的闪存和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]);
}

所以问题是,我如何转换地址,以便可以返回对对象的引用?

c++ casting memory-address
1个回答
0
投票

编译器会为每个元素生成一个构造函数调用。

使uint32_at构造函数constexpr

© www.soinside.com 2019 - 2024. All rights reserved.