Mik*_*hke 10 c++ templates forward-declaration
假设我有2个班:
class A
{
public:
typedef std::shared_ptr<A> Ref;
...
private:
B::Ref _b;
}
class B
{
public:
typedef std::shared_ptr<B> Ref;
...
private:
A::Ref _a;
}
Run Code Online (Sandbox Code Playgroud)
这显然需要B类和B :: Ref的前向声明.前向声明B很简单,但如何对B :: Ref也这样做?
解决这个问题的方法之一是
class A;
class B ;
template <typename T>
struct Traits {
typedef std::shared_ptr<T> Ptr;
};
class A
{
private:
Traits<B>::Ptr _b;
};
class B
{
private:
Traits<A>::Ptr _a;
};
Run Code Online (Sandbox Code Playgroud)
您不能向前声明嵌套,typedef因为在向前声明时B将是不完整的类型。但是,您可以像下面这样解决您的问题:
class B;
class A {
std::shared_ptr<B> _b;
public:
typedef std::shared_ptr<A> Ref;
};
class B {
A::Ref _a;
public:
typedef std::shared_ptr<B> Ref;
};
Run Code Online (Sandbox Code Playgroud)