我正在尝试编写自己的模板来比较字符串,但我不知道它应该如何工作,尽管我已经完成了一些教程。我在编译过程中仍然遇到这个错误,我不知道如何解决它:
unreference to CSearch<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::equal_to<char> >::Add(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
这是我到目前为止所拥有的:
template <typename _Type, typename _Comparator = std::equal_to<typename _Type::value_type> >
class CSearch {
public:
// default constructor
CSearch() : cmp(_Comparator()) {
};
// constructor with comparator parameter
CSearch(const _Comparator &_cmp) : cmp(_cmp) {
};
// destructor (if needed)
~CSearch() {
};
void Add(int id,
const _Type & needle);
set<int> Search(const _Type & hayHeap) const;
_Comparator cmp;
private:
// empty copy constructor
// empty operator =
};
class CharComparator {
public:
CharComparator(bool caseSensitive = true)
: m_CaseSensitive(caseSensitive) {
}
bool operator () (const char & a, const char & b) const {
return m_CaseSensitive ? a == b : toupper(a) == toupper(b);
}
private:
bool m_CaseSensitive;
};
int main(int argc, char** argv) {
CSearch <string> test1;
test1 . Add(0, "hello");
test1 . Add(1, "world");
test1 . Add(2, "rld");
test1 . Add(3, "ell");
test1 . Add(4, "hell");
return 0;
CSearch <string, bool (*)(const char &, const char &)> test2 ( upperCaseCompare );
test2 . Add ( 0, "hello" );
test2 . Add ( 1, "world" );
test2 . Add ( 2, "rld" );
test2 . Add ( 3, "ell" );
test2 . Add ( 4, "hell" );
printSet ( test2 . Search ( "HeLlO WoRlD!" ) );
// 0, 1, 2, 3, 4
printSet ( test2 . Search ( "hallo world!" ) );
// 1, 2
CSearch <string, CharComparator> test3 ( CharComparator ( false ) );
test3 . Add ( 0, "hello" );
test3 . Add ( 1, "world" );
test3 . Add ( 2, "rld" );
test3 . Add ( 3, "ell" );
test3 . Add ( 4, "hell" );
printSet ( test3 . Search ( "heLLo world!" ) );
// 0, 1, 2, 3, 4
printSet ( test3 . Search ( "Well, templates are hell" ) );
// 3, 4
CSearch <vector<int> > test4;
static const int needleA [] = { 1, 6, 1, 6, 9, 12 };
static const int needleB [] = { 9, 12, 7 };
static const int hayHeap [] = { 1, 6, 1, 6, 1, 6, 9, 12, 8 };
test4 . Add ( 0, makeVector ( needleA ) );
test4 . Add ( 1, makeVector ( needleB ) );
printSet ( test4 . Search ( makeVector ( hayHeap ) ) );
// 0
CSearch <vector<string> > test5;
static const string needleX [] = { "Prague", "Bern", "Rome" };
static const string needleY [] = { "London", "Prague", "Bern" };
static const string needleZ [] = { "London", "Rome" };
static const string cityHeap [] = { "Berlin", "London", "Prague", "Bern", "Rome", "Moscow" };
test5 . Add ( 0, makeVector ( needleX ) );
test5 . Add ( 1, makeVector ( needleY ) );
test5 . Add ( 2, makeVector ( needleZ ) );
printSet ( test5 . Search ( makeVector ( cityHeap ) ) );
// 0, 1
}
您能否告诉我,如何定义该模板以能够处理我在其中声明的所有类型main
?