我是模板的新手,正在尝试编译这段代码:
template <typename _Type, typename _Comparator = std::equal_to<_Type> >
class CSearch {
public:
CSearch() : cmp(_Comparator()) {
}
CSearch(const _Comparator &_cmp) : cmp(_cmp) {
}
void Add(int id,
const _Type & needle) {
values.insert(needle); // problem
}
set<int> Search(const _Type & hayHeap) const {
}
private:
const _Comparator &cmp;
/*typename(?)*/ set<const _Type&> values; // problem
CSearch(const CSearch &other);
CSearch &operator=(const CSearch &other);
};
(...)
int main(){
CSearch <string> test;
}
我做了一些搜索,我怀疑问题出在 typename
关键字上。但是,无论我如何尝试,我都找不到解决方案。
当有类型名时,我得到 expected nested-name-specifier
错误。如果不是,我会得到一个非常长的 STL 错误。
有什么收获?谢谢
编辑:这个场景怎么样,我尝试在 STL 中存储指向对象的指针?
template <typename _Type>
class Needle {
public:
int ID;
_Type *data;
};
template <typename _Type, typename _Comparator = std::equal_to<_Type> >
class CSearch {
public:
CSearch() : cmp(_Comparator()) {
}
CSearch(const _Comparator &_cmp) : cmp(_cmp) {
}
void Add(int id,
const _Type & needle) {
Needle<_Type> *tmp = new Needle<_Type>();
tmp -> ID = id;
tmp -> data = &needle;
values.insert(tmp);
}
set<int> Search(const _Type & hayHeap) const {
}
private:
const _Comparator &cmp;
set<const Needle*> values;
CSearch(const CSearch &other);
CSearch &operator=(const CSearch &other);
};
最佳答案
首先,_Foo 或 _Bar 之类的东西不适合您使用,不要从标准库的实现中复制该习惯。此外,它不会让事情更容易阅读或写作。
现在,您的代码中的问题是您正在尝试创建一组引用,但引用不是容器的有效元素。那里不需要“typename”,因为那里没有使用依赖类型。
关于c++ - 使用 STL 的类模板无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850638/