вызов двоичного предиката - PullRequest
0 голосов
/ 16 апреля 2019
#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

template<typename Iter1, typename Iter2>
bool pred(Iter1 it1, Iter2 it2){
    if(*it1 == *it2)
        return true;
    return false;
}

template<typename FwdIter1, typename InIter2, typename BinPred>
bool contains(FwdIter1 first1, FwdIter1 last1, InIter2 first2, InIter2 last2, BinPred pred){
    for(InIter2 it2 = first2; it2 != last2; ++it2){
        for(InIter2 it1 = first1; it1 != last1; ++it1){
            if(pred(it1, it2)){
                return true;
            }
        }
    }
    return false;
}

int main()
{
    vector<int> v1 {2, 5, 6, 8};
    vector<int> v2 {1, 2, 3, 10};
    if (contains(v1.begin(), v1.end(), v2.begin(), v2.end(), pred))
        cout << "Element found" << '\n';
    else
        cout << "Element not found \n";
    return 0;
}

Почему это происходит?

error: no matching function for call to 'contains(std::vector<int>::iterator, std::vector<int>::iterator, std::vector<int>::iterator, std::vector<int>::iterator, < unresolved overloaded function type >)'

1 Ответ

0 голосов
/ 16 апреля 2019

Вы должны указать аргументы шаблона для pred, например,

if (contains(v1.begin(), v1.end(), v2.begin(), v2.end(), 
             pred<decltype(v1.begin()), decltype(v2.begin())>))

ЖИТЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...