c++模板类的自引用

C++ template class self referencing

本文关键字:自引用 c++      更新时间:2023-10-16

我试图创建一个类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<P,S>引用Info<S,P>的意图?

使用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);
}