[英]Porting C++ struct to Delphi
首先,讓我向您展示結構:
struct HPOLY
{
HPOLY() : m_nWorldIndex(0xFFFFFFFF), m_nPolyIndex(0xFFFFFFFF) {}
HPOLY(__int32 nWorldIndex, __int32 nPolyIndex) : m_nWorldIndex(nWorldIndex), m_nPolyIndex(nPolyIndex) {}
HPOLY(const HPOLY& hPoly) : m_nWorldIndex(hPoly.m_nWorldIndex), m_nPolyIndex(hPoly.m_nPolyIndex) {}
HPOLY &operator=(const HPOLY &hOther)
{
m_nWorldIndex = hOther.m_nWorldIndex;
m_nPolyIndex = hOther.m_nPolyIndex;
return *this;
}
bool operator==(const HPOLY &hOther) const
{
return (m_nWorldIndex == hOther.m_nWorldIndex) && (m_nPolyIndex == hOther.m_nPolyIndex);
}
bool operator!=(const HPOLY &hOther) const
{
return (m_nWorldIndex != hOther.m_nWorldIndex) || (m_nPolyIndex != hOther.m_nPolyIndex);
}
__int32 m_nPolyIndex, m_nWorldIndex;
};
有一些我不明白的事情。
結構內部HPOLY的重復意味着什么? 以及如何將結構轉錄為delphi代碼?
謝謝您的幫助。
結構中HPOLY的重復是該類型的構造函數的定義。 在Delphi中,復制構造函數(C ++中的第三個,它基於另一個相同類型的實例構造此類型的實例)在Delphi中不是必需的。 雙參數構造函數允許您指定兩個字段的初始值。 默認的零參數構造函數將字段的值設置為-1,但Delphi不允許在記錄上使用這樣的構造函數。
該結構中的下一部分是賦值運算符。 Delphi自動為記錄提供。 接下來是比較運算符,比較相等和不等式的類型。 當您在HPoly
值上使用=
和<>
運算符時,編譯器將調用它們。
type
HPoly = record
m_nPolyIndex, m_nWorldIndex: Integer;
constructor Create(nWorldIndex, nPolyIndex: Integer);
class operator Equal(const a: HPoly; const b: HPoly): Boolean;
class operator NotEqual(const a: HPoly; const b: HPoly): Boolean;
end;
constructor HPoly.Create(nWorldIndex, nPolyIndex: Integer);
begin
m_nPolyIndex := nPolyIndex;
m_nWorldIndex := nWorldIndex;
end;
class operator HPoly.Equal(const a, b: HPoly): Boolean;
begin
Result := (a.m_nPolyIndex = b.m_nPolyIndex)
and (a.m_nWorldIndex = b.m_nWorldIndex);
end;
class operator HPoly.NotEqual(const a, b: HPoly): Boolean;
begin
Result := (a.m_nPolyIndex <> b.m_nPolyIndex)
or (a.m_nWorldIndex <> b.m_nWorldIndex);
end;
HPOLY
是一個只有兩個32位整數字段的結構: m_nPolyIndex
和m_nWorldIndex
。
前三行稱為構造HPOLY
:每當創建新的HPOLY
實例時執行的代碼。 然后,在冒號后寫入變量名稱意味着初始化變量內容。
例如,創建一個空的HPOLY:
HPOLY x;
在x上調用第一個空構造函數。 x.m_nWorldIndex
值為0xFFFFFFFF, x.m_nPolyIndex
值為0xFFFFFFFF。
另外兩個構造函數是手動初始化兩個字段值:
XPOLY y( 1, 2 );
XPOLY z( y );
y.m_nWorldIndex
值為1, y.m_nPolyIndex
值為2。
值z.m_nWorldIndex
是y.m_nWorldIndex
,和值z.m_nPolyIndex
是y.m_nPolyIndex
。
在Delphi上, TPOLY
結構可以轉換為以下記錄:
TPOLY = Record
m_nWorldIndex : Integer;
m_nPolyIndex : Integer;
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.