我在循环引用类型时遇到了麻烦。为了实现以下目的:
// Parent.h
template <typename OtherType>
class EnclosingType
{
public:
typename OtherType type_;
};
class OtherType
{
public:
EnclosingType & e_;
OtherType (EnclosingType & e) : e_(e) {}
};
要求是OtherType引用EnclosingType对象,以便它可以调用EnclosingType上的方法,而EnclosingType可以调用OtherType上的方法。主要目标是允许实现者提供其自己的OtherType派生类型。
处理这种循环依赖类型的情况的最佳方法是什么? OtherType的正确声明是什么? OtherType :: EnclosingType的正确声明是什么? Enclosing :: OtherType :: type_的正确声明是什么?我什至需要做些什么?
谢谢。
最佳答案
如果我假设您希望OtherType
包含对EnclosingType<OtherType>
的引用,则可以执行以下操作:
// EnclosingType declaration
template <typename T>
class EnclosingType;
// OtherType definition
class OtherType
{
public:
EnclosingType<OtherType> & e_;
OtherType (EnclosingType<OtherType> & e) : e_(e) {}
};
// EnclosingType definition
template <typename T>
class EnclosingType
{
public:
T type_;
};
您可以在
EnclosingType
中使用OtherType
声明(与定义相反),因为您是通过指针或引用来引用它的。 EnclosingType<OtherType>
的定义需要OtherType
的定义,因为它包含值。