Я делаю шаблон для класса. Предполагается, что этот класс сможет найти строку внутри строки. Предполагается, что шаблон работает для строки, вектора, списка, списка пересылки и т. Д. c. Иногда для поиска мы можем использовать пользовательскую функцию для сравнения 2 элементов, но по умолчанию мы используем std :: equal_to () -> "==". Некоторые примеры утверждений:
CSearch <string> test1; // this one is working for me
test1 . Add ( 0, "hello" );
test1 . Add ( 1, "world" );
assert ( test1 . Search ( "hello world!" ) == (set<int> { 0, 1}) );
// or
CSearch <string, bool (*)(const char &, const char &)> test2 ( upperCaseCompare ); //this one is not working
// we have upperCaseCompare declared in code
test2 . Add ( 0, "hello" );
test2 . Add ( 1, "world" );
assert ( test2 . Search ( "HeLlO WoRlD!" ) == (set<int> { 0, 1, 2, 3, 4 }) );
Я думаю, что проблема, которая у меня есть, заключается в объявлении шаблона. Я объявляю шаблон следующим образом:
template <typename _Type , typename _Comparator = equal_to<_Type> >
Также я использую 2 констант, один пустой -> CSearch (void) и один CSearch (const _Comparator & компаратор). Моя текущая ошибка при компиляции: https://gyazo.com/5042cb6464d2a9fb4c907d41c02d8c39
Часть моего текущего кода: https://pastebin.com/MSbSsy3U
Я буду рад любой помощи, которую вы можете дать мне.