我是模板新手,正在尝试编译此代码:
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);
};