C ++ в C # указывает на структуру внутри структуры того же типа

Я пытаюсь конвертировать немного C ++ в C # для личного проекта обучения.

Ниже вы увидите мой C ++, а затем мою попытку конвертировать его в C # с использованием классов Unity, таких как Vector3.

Мой вопрос:

Как мне обращаться с указателями на структуру внутри структуры того же типа?

Насколько я могу судить, это невозможно (HexTri m_nbAB, m_nbBC, m_nbCA;)

Нужно ли использовать класс вместо этого?

.ч файл

struct HexTri;struct HexTile
{
HexTile( Imath::V3f p );

Imath::V3f m_vertPos;
Imath::V3f m_nrm;
enum {
Terrain_WATER,
Terrain_DESERT,
Terrain_GRASSLAND,
Terrain_FOREST,
Terrain_MOUNTAIN
};
int m_terrain;
std::vector<HexTri*> m_hextri;
};

struct HexTri
{
HexTri( size_t a, size_t b, size_t c );

size_t m_hexA, m_hexB, m_hexC;
HexTri *m_nbAB, *m_nbBC, *m_nbCA;
union {
size_t m_newvert;
float m_angle;
} m_tmp;
};

.файл cpp

HexTile::HexTile( Imath::V3f p ) :
m_vertPos( p )
{
m_terrain = HexTile::Terrain_DESERT;
m_nrm = p.normalize();
}

HexTri::HexTri( size_t a, size_t b, size_t c) :
m_hexA( a ), m_hexB( b ), m_hexC( c )
{
m_nbAB = NULL;
m_nbBC = NULL;
m_nbCA = NULL;
}

Вот мое преобразование C # до сих пор

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public struct HexTile
{
private Vector3 _position;
public Vector3 Position
{
get
{
return _position;
}
set
{
_position = value;
}
}
private Vector3 _normal;
public Vector3 Normal
{
get
{
return _normal;
}
set
{
_normal = value;
}
}
enum terrain{
Terrain_WATER,
Terrain_DESERT,
Terrain_GRASSLAND,
Terrain_FOREST,
Terrain_MOUNTAIN
};
List<HexTri> hextri;

public HexTile( Vector3 position, Vector3 normal)
{
// Defaults
_position =  new Vector3(0,0,0);
_normal =  new Vector3(0,0,0);
hextri = new List<HexTri>();

// Initilize with value
Position = position;
Normal = normal;
}
}

public struct HexTri
{

private int _hexA;
public int HexA
{
get
{
return _hexA;
}
set
{
_hexA = value;
}
}
private int _hexB;
public int HexB
{
get
{
return _hexB;
}
set
{
_hexB = value;
}
}
private int _hexC;
public int HexC
{
get
{
return _hexC;
}
set
{
_hexC = value;
}
}

// Q1 No pointers, cant do this
HexTri m_nbAB, m_nbBC, m_nbCA;  //??
public HexTri( int a, int b, int c)
{
// Defaults
_hexA = -1;//??
_hexB = -1;//??
_hexC = -1;//??

// Initilize with value
HexA = a;
HexB = b;
HexC = c;
}
}

0

Решение

Мой взгляд на это:

Вы правильно объявляете 3 объекта типа HexTri.

РЕДАКТИРОВАТЬ, чтобы обратиться к точке, объясненной pinkfloydx33 в комментарии:
Если вы объявили HexTri как класс вместо структуры, этот C # этот код делает a а также b «указать» на тот же объект:

HexTri a = new HexTri();
HexTri b = a;

Хорошее объяснение различий между классами и структурами в C # (они не являются такими же, как в классе против структуры в C ++) в этот ответ.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]