C ++ стандартные аргументы в шаблонной функции - PullRequest
0 голосов
/ 26 апреля 2018

Я борюсь с шаблонами. В моем шаблонном классе test я хочу иметь метод Find. Этот метод должен иметь необязательный аргумент max и необязательный аргумент filter. Фильтр может представлять указатель на функцию, функтор или лямбда-выражение .

Проблема в том, когда я пытаюсь скомпилировать код. Я получаю сообщение об ошибке: no matching function for call to 'test<std::basic_string<char>, int>::Find(const char [5])' Что не должно произойти, потому что я указал параметры по умолчанию.

Кто-нибудь может объяснить, как правильно управлять этими шаблонами? Должен ли я использовать std::function для filter вместо template <typename F>?

template <typename X>
bool cmp (const X &) { return true; }

template <typename A, typename B>
class test
{
public:
    // ...
    template <typename F>
    set<A,B> Find(A place, int max = 0, const F & filter = cmp) // problem, won't use cmp as default
    {
        // .. do something
    };
};

int main()
{
    test<string,int> lines;
    lines . Find ( "test" );
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...