【发布时间】:2021-02-04 11:12:15
【问题描述】:
我正在尝试在模板化类中使用模板化对象,其中对象的模板参数与类所需的模板参数不同。这听起来有点混乱,因为没有正确描述,这里是一个例子。
以下类实现了二叉搜索树:
template <typename KEY, typename VALUE>
class BST{
public:
BST(void){
cache = new GCACHE<uint64_t, BSTObject>(this);
}
struct{
string value;
}BSTObject;
GCACHE<uint64_t, BSTObject>* cache;
...
}
GCACHE 类实现了一个通用缓存,为了正确运行,它需要一个指向它必须缓存的 BST 的指针。这个指针被传递给 GCACHE 构造函数:
template <typename CKEY, typename OBJECT>
GCACHE{
public:
GCACHE( *** pointer to BST, a templated class whoose template types that are not CKEY and OBJECT ***); (A)
}
如何在 (A) 中指定/定义一组不同于 GCACHE 所需的模板参数(示例中的 CKEY 和 OBJECT)?
GCACHE对象的模板参数是uint64_t和BSTObject,BST对象的模板参数可能是int和string。
我真的很困惑。也许我弄错了,解决方案很简单...... 谢谢你的帮助。
我希望上面的例子足够清楚以获得帮助。如果不是,请告诉我,以便我重新提出问题。
【问题讨论】:
-
BST模板将BSTObject定义为成员对象,但您还尝试使用BSTObject作为GCACHE<uint64_t, BSTObject>模板参数中的类型。目前尚不清楚那应该是什么。 -
另外,
BST如何实际使用其KEY和VALUE参数?GCACHE(将其视为通用实用程序,与 BST 无关)如何使用其CKEY和OBJECT参数? -
BST 类在方法 insert() find() 和 delete() 中使用 KEY 和 VALUE。 GCACHE 类使用 BSTObj 来存储 VALUE 对象以及与 cahce 相关的信息(点击...)
标签: c++ templates template-specialization