C ++:递归模板参数错误

时间:2018-05-24 09:15:04

标签: c++ templates multiple-inheritance

我习惯在Delphi / Lazarus中使用这样的代码:

type
    TPair<TKey, TValue> = record
        Key:TKey;
        Value:TValue;
    end;
    TAbstractList<T> = class
    end;
    TAbstractPairList<TKey, TValue> = class(TAbstractList<TPair<TKey, TValue>>)
    end;

我认为,C ++中的模板更强大。但...

#include <stdio.h>

template <class TKey, class TValue>
struct TPair
{
    TKey Key;
    TValue Value;
};

template <class T>
class TAbstractList
{
    public:
    virtual void DoSomething() = 0;
};

template <class T>
class TList:public virtual TAbstractList<T>
{
    public:
    virtual void DoSomething() {
        printf("%s", "Implementation!");
    };
};

template <class TKey, class TValue>
class TAbstractPairList:public virtual TAbstractList<TPair<TKey, TValue>>
{

};

template <class TKey, class TValue>
class TPairList:public virtual TAbstractPairList<TKey, TValue>,
                       virtual TList<TPair<TKey, TValue>>
{

};

TAbstractPairList<int, int> *List;

int main()
{
    List = new TPairList<int, int>;
    List->DoSomething();
    delete List;
};

此代码在联机C ++编译器中编译,如https://www.onlinegdb.com,但无法在实际编译中编译,如Borland C ++ Builder。

即。这个有效:

typedef TPair<int, int> TMyPair;
TAbstractList<TMyPair> *List;

但是这个没有:

TAbstractList<TPair<int, int>> *List;

我不能把“typedef”放在“template”和“class”之间。

这段代码有什么问题?为什么在某些C ++编译器中无法使用递归模板参数?这个问题能以某种方式解决吗?

0 个答案:

没有答案