仅从另一个 class 创建 class/handle
Creating class/handle only from another class
我只需要我的网格 class 就可以创建这些 classes,我不想让这些 classes 嵌套,因为限定名称太长如果是这样。我怎样才能做到最好?
struct Handle
{
explicit Handle(int i) : _index(i) {}
bool IsValid() { return _index != NO_HANDLE; }
protected:
enum { NO_HANDLE = -1 };
int _index;
};
// **************************************************************************************
struct HalfEdgeHandle : Handle
{
HalfEdgeHandle(int i) : Handle(i) {}
static HalfEdgeHandle GetInvalid() { return HalfEdgeHandle(NO_HANDLE); }
};
// **************************************************************************************
struct FaceHandle : Handle
{
FaceHandle(int i) : Handle(i) {}
static FaceHandle GetInvalid() { return FaceHandle(NO_HANDLE); }
};
// **************************************************************************************
struct VertexHandle : Handle
{
VertexHandle(int i) : Handle(i) {}
static VertexHandle GetInvalid() { return VertexHandle(NO_HANDLE); }
};
外部只能访问无效的句柄,目前我认为可以通过使用静态变量来完成。
使用好友。
class Factory;
struct Handle
{
protected:
explicit Handle(int i) : _index(i) {}
public:
bool IsValid() { return _index != NO_HANDLE; }
protected:
enum { NO_HANDLE = -1 };
int _index;
friend class Factory; // and so on in Derived classes
};
我只需要我的网格 class 就可以创建这些 classes,我不想让这些 classes 嵌套,因为限定名称太长如果是这样。我怎样才能做到最好?
struct Handle
{
explicit Handle(int i) : _index(i) {}
bool IsValid() { return _index != NO_HANDLE; }
protected:
enum { NO_HANDLE = -1 };
int _index;
};
// **************************************************************************************
struct HalfEdgeHandle : Handle
{
HalfEdgeHandle(int i) : Handle(i) {}
static HalfEdgeHandle GetInvalid() { return HalfEdgeHandle(NO_HANDLE); }
};
// **************************************************************************************
struct FaceHandle : Handle
{
FaceHandle(int i) : Handle(i) {}
static FaceHandle GetInvalid() { return FaceHandle(NO_HANDLE); }
};
// **************************************************************************************
struct VertexHandle : Handle
{
VertexHandle(int i) : Handle(i) {}
static VertexHandle GetInvalid() { return VertexHandle(NO_HANDLE); }
};
外部只能访问无效的句柄,目前我认为可以通过使用静态变量来完成。
使用好友。
class Factory;
struct Handle
{
protected:
explicit Handle(int i) : _index(i) {}
public:
bool IsValid() { return _index != NO_HANDLE; }
protected:
enum { NO_HANDLE = -1 };
int _index;
friend class Factory; // and so on in Derived classes
};