Что вызывает std :: bad_function_call? - PullRequest
31 голосов
/ 06 апреля 2011

Я видел несколько вопросов , которые относятся к std::bad_function_call исключению , но не смог найти ни одного из Google по поводу что вызывает это исключение.

Какое поведение должно вызывать это исключение? Можете ли вы привести мне минимальные примеры, которые не имеют других семантических проблем?

Ответы [ 4 ]

47 голосов
/ 06 апреля 2011

Конечно, проще всего попытаться вызвать std::function пусто.

int main() {
    std::function<int()> intfunc;
    int x = intfunc(); // BAD
}
3 голосов
/ 17 апреля 2015

в моем случае проблема была в списке захвата.у меня есть рекурсивная лямбда-функция.

//decl
std::function<void(const SBone*, const core::vector3df&, const core::quaternion&)> f_build;
f_build = [&f_build](const SBone* bone, const core::vector3df& pos, const core::quaternion& rot)
{
...
}

отсутствует и из f_build в списке захвата генерировать неверный вызов.

3 голосов
/ 18 сентября 2014

"Выполнение вызова функции без наличия цели для вызова выдает исключение типа std :: bad_function_call"

    std::function<void(int,int)> f;
    f(33,66); // throws std::bad_function_call

Нет кредитов для меня .... это Николай Йосуттис Пандит из C ++ Standard Lib

0 голосов
/ 27 августа 2018

Вызов временной функции также может выдать:

struct F
{
    const std::function<void()>& myF;

    F(const std::function<void()>& f) : myF(f) {}

    void call()
    {
        myF();
    }
};

int main()
{
    F f([]{ std::cout << "Hello World!" << std::endl;});

    f.call();

    return 0;
}

Но это зависит от компилятора (vc ++ throws, g ++ not).

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