Использование функторов в классе generi c - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь написать версию контейнера stl для бедного человека, но я не очень способен с шаблонами. Моя версия объявлена ​​так:

template <class T, class comp>
class set
{
...
}

Когда я использую функтор компьютора напрямую, кажется, что все компилируется нормально, но когда я пытаюсь передать его дальше действительным функциям stl, например:

void set_method(const T &elem)
{
        lower = lower_bound(internal.begin(), internal.end(), elem, comp);
}

Я получаю некоторые неприятные ошибки по линии error: expected primary-expression before ‘)’ token. Есть ли способ сделать такую ​​вещь, или что-то с подобным эффектом, или я должен реализовать все, чтобы использовать функтор компа напрямую?

1 Ответ

3 голосов
/ 26 марта 2020

comp является параметром типа, что означает comp обозначает тип, а не объект. lower_bound ожидает функциональный объект, а не тип функционального объекта, поэтому вы получите ошибку. Чтобы «преобразовать» тип в объект, вам нужно

lower = lower_bound(internal.begin(), internal.end(), elem, comp{});

Где comp{} создает объект типа comp.

В противном случае вы можете сделать comp член в вашем наборе, как

template <class T, class comp>
class set
{
private:
    comp cmp{};
    // ...
public:
    set(comp cmp) : cmp(cmp)
    // ...
    void set_method(const T &elem)
    {
        auto lower = lower_bound(internal.begin(), internal.end(), elem, cmp);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...