C ++模板类自引用

时间:2013-04-15 09:44:23

标签: c++ templates self-reference

我正在尝试创建一个类Info<P,S>,它包含指向另一个Info<S,P>类型对象的指针。我有以下代码。

template <class P, class S>
class Info {
….
public:
Info(…, Info<S,P>* parentInfo) : …, parentInfo(parentInfo)
{}
…
private:
Info<S, P> *parentInfo;
};

….

typedef Info<ActualP, ActualS> OneInfo;
typedef Info<ActualS, ActualP> OtherInfo;
…
OtherInfo* parentInfo =…;
OneInfo info(…, parentInfo);

这不是编译并且说构造函数不是有效的(在调用时)。

我想这会在尝试解决时导致无限递归。我对吗?从Info<S,P>

实现引用Info<P,S>的这一意图有哪些替代方法?

1 个答案:

答案 0 :(得分:1)

使用typename来引用依赖于模板参数的类型:

template <class T>
class Info
{
    public:
    Info() : parentInfo(NULL) {}

    Info(Info<typename T> *info) :
        parentInfo(info)
    {
    }

    private:
        Info<typename T> *parentInfo;
};

int _tmain(int, _TCHAR**)
{
    Info<int> parent;
    Info<int> child(&parent);
}