Почему я получаю исключение bad_function_call при использовании std :: function в качестве объекта функции сравнения в std :: map - PullRequest
0 голосов
/ 04 мая 2020

Я получаю исключение std :: __ 1 :: bad_function_call: std ::, когда выполняю приведенный ниже код.

Я попытался инициализировать std :: function в конструкторе и инициализировать ее напрямую, когда она определена как переменная класса. В обоих случаях я получаю вышеупомянутое исключение.

Обратите внимание, что если я определяю объект функции (класс с определенной функцией bool operator ()), код работает правильно. Как я могу записать лямбда в std :: function, чтобы не было выброшено исключение? Кроме того, что вызывает исключение в коде ниже?

#include <map>
using namespace std;

class foo {
public:
    foo() {cmp = [](const int &a, const int &b){return a > b;};}
    //function<bool(const int &a, const int &b)> cmp = [](const int &a, const int &b){return a > b;};
    function<bool(const int &a, const int &b)> cmp;
    map<int, int, decltype(cmp)> rbtree;
};

int main() {

  foo* obj = new foo();
  obj->rbtree[5] = 5;
  obj->rbtree[1] = 5;
  obj->rbtree[5] = 5;
}

1 Ответ

0 голосов
/ 04 мая 2020

Возможно, вы ищете что-то вроде этого:

class foo {
public:
    using Cmp = function<bool(int a, int b)>;
    map<int, int, Cmp> rbtree { [](int a, int b){return a > b;} };
};

Демо

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