2011-02-08 115 views
4

首先,让我告诉你的结构:移植C++结构德尔福

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代码?

谢谢你的帮助。

+4

我建议你可能需要阅读基于C一些入门书籍++ ... – 2011-02-08 15:31:57

+0

你想要一个Delphi模块和C++模块之间通过跨边界,这些结构中的一个? – 2011-02-08 16:06:32

回答

8

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; 
4

HPOLY是一个只有两个32位整数字段的结构:m_nPolyIndexm_nWorldIndex

前三行称为构造函数:只要创建新的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; 
+0

非常感谢。很好的解释。 – oopbase 2011-02-08 15:44:07