Я борюсь с шаблонами. В моем шаблонном классе 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;
}