Я хотел бы иметь возможность иметь следующую конструкцию, существующую в Delphi, которая также работает в c ++
Сначала код Delphi:
type
TSlice = record
private
function GetData4: UINT32; inline;
procedure SetData4(Index: 0..15; Value: UINT32); inline;
public
Data8: array[0..7] of UINT64;
property Data4[index: 0..15]: UINT32 read GetData4 write SetData4;
end;
Теперь код на C ++, который у меня естьи работает:
struct TSlice {
UINT64 Data8[8];
__device__ __forceinline__ UINT32 * Data4() { return reinterpret_cast<UINT32*>(Data8); }
}
Тем не менее, я все еще должен написать
for (auto i = 0; i < 3; i++) {
Slice->Data4()[lane * 4] = SliverPart;
Slice->Data4()[lane * 4 + 1] = SliverPart;
}
Я действительно хотел бы сбросить ()
здесь: Slice->Data2[lane * 4]
ОбъявлениеData4
as UINT32 *const Data4 = (UINT32 *)&Data8;
В структуре не помогает, потому что это дает мне дополнительные 8 байтов, а это не то, что я хочу.
Я хочу, чтобы перевод был плавным.
Как я могу это сделать?
Я думал о перегрузке оператора []
, но это потребовало бы сделать Data4
подструктурой, и даже тогда я не уверен, что это будетработать, если я хочу, чтобы все работало inline (т.е. без каких-либо накладных расходов).
Использование объединения работает, но количество точек, которые мне нужно набрать в коде клиента, находится за пределами этого мира (classname.unionname.datamember.arrayname[index]
)