Я пытаюсь конвертировать немного 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;
}
}
Мой взгляд на это:
Вы правильно объявляете 3 объекта типа HexTri.
РЕДАКТИРОВАТЬ, чтобы обратиться к точке, объясненной pinkfloydx33 в комментарии:
Если вы объявили HexTri как класс вместо структуры, этот C # этот код делает a
а также b
«указать» на тот же объект:
HexTri a = new HexTri();
HexTri b = a;
Хорошее объяснение различий между классами и структурами в C # (они не являются такими же, как в классе против структуры в C ++) в этот ответ.
Других решений пока нет …