簡體   English   中英

將C ++結構移植到Delphi

[英]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_nPolyIndexm_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_nWorldIndexy.m_nWorldIndex ,和值z.m_nPolyIndexy.m_nPolyIndex

在Delphi上, TPOLY結構可以轉換為以下記錄:

TPOLY = Record
  m_nWorldIndex : Integer;
  m_nPolyIndex : Integer;
end; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM