c++ - C++:递归模板参数错误
问题描述
我已经习惯在 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,但无法在真实的 C++ 编译器中编译,例如 Borland C++ Builder。
即这个有效:
typedef TPair<int, int> TMyPair;
TAbstractList<TMyPair> *List;
但是这个没有:
TAbstractList<TPair<int, int>> *List;
而且我不能将“typedef”放在“模板”和“类”之间。
这段代码有什么问题?为什么在某些 C++ 编译器中不能使用递归模板参数?这个问题能以某种方式解决吗?
解决方案
推荐阅读
- go - goroutine different behaviour for statement execution and function execution
- python - 如果将 Tensorflow 对象保存到全局变量并检索到,则 Tensorflow.Session 为 None
- javascript - 访问对象内部的属性
- selenium-webdriver - 无法在 Linux(debian)机器上调用 chromedriver
- javascript - React 多步骤表单提交和验证
- scala - 无法在 spark 中使用 foreachBatch 创建多个文件(此代码现在可以使用)
- react-native - 如何将 react-navigation 中的 state.params 作为 props 传递给 react native
- r - 删除多个数据框中的行
- python - 如何在 JSON 文件中找到 2 个日期之间的间隔
- python - 为什么我的条件循环不能正常运行?