Шаблон класса для типа и необязательной функции - PullRequest
0 голосов
/ 30 апреля 2020

Я делаю шаблон для класса. Предполагается, что этот класс сможет найти строку внутри строки. Предполагается, что шаблон работает для строки, вектора, списка, списка пересылки и т. Д. 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

Я буду рад любой помощи, которую вы можете дать мне.

...