我想知道是否可以将一个声明的类型(在本例中是记录)传递给我的函数。如果不是因为
我正在将代码从 C 翻译成 Delphi,并希望尽可能保持与原始代码的接近。C 程序声明了 PushArray 和 PushStruct 作为宏。由于 Delphi 没有宏支持,我正在尝试将它们转换为函数。
我已经搜索过一些信息,似乎可以使用泛型类型。例如,
SizeOf()
函数可以接受类型作为参数,我甚至不会提出这个问题。我正在将代码从 C 翻译成 Delphi,并希望尽可能保持与原始代码的接近。C 程序声明了 PushArray 和 PushStruct 作为宏。由于 Delphi 没有宏支持,我正在尝试将它们转换为函数。
我已经搜索过一些信息,似乎可以使用泛型类型。例如,
function PushStruct<T>(Arena : Pmemory_arena; dtype : <T>)
,但你只能在面向对象的应用程序中使用它。function PushSize_(Arena : Pmemory_arena; Size : memory_index) : pointer;
begin
Assert((Arena^.Used + Size) <= Arena^.Size);
Result := Arena^.Base + Arena^.Used;
Arena^.Used := Arena^.Used + Size;
end;
function PushStruct(Arena : Pmemory_arena; dtype : ?) : pointer;
begin
result := PushSize_(Arena, sizeof(dtype));
end;
function PushArray(Arena : Pmemory_arena; Count: uint32; dtype : ?) : pointer;
begin
result := PushSize_(Arena, (Count)*sizeof(dtype))
end;
这是原始的C代码:
#define PushStruct(Arena, type) (type *)PushSize_(Arena, sizeof(type))
#define PushArray(Arena, Count, type) (type *)PushSize_(Arena, (Count)*sizeof(type))
void *
PushSize_(memory_arena *Arena, memory_index Size)
{
Assert((Arena->Used + Size) <= Arena->Size);
void *Result = Arena->Base + Arena->Used;
Arena->Used += Size;
return(Result);
}