【发布时间】:2019-01-28 14:30:49
【问题描述】:
我希望能够让 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 声明为UINT32 *const Data4 = (UINT32 *)&Data8;
在结构中没有帮助,因为这让我获得了额外的 8 个字节,这不是我想要的。
我希望翻译是无缝的。
我该怎么做?
我正在考虑重载 [] 运算符,但这需要使 Data4 成为一个子结构,即使这样我也不确定如果我想让所有东西都可以内联工作(即没有任何运行时)它会起作用高架)。
使用联合有效,但我需要在客户端代码中输入的点数超出了这个世界 (classname.unionname.datamember.arrayname[index])
【问题讨论】:
-
我不认为你可以在 C++ 中得到这个。生命周期规则妨碍了。
-
如果您使用 Embarcadero C++ Builder,那么它已经扩展了 C++ 语言以具有属性。在普通的 C++ 中没有办法做到这一点。
-
哦,请注意您的
Data4函数会中断 strict aliasing。 -
@Someprogrammerdude,Ja,我知道,我没关系。我必须在这里偷工减料。
标签: c++ delphi properties