📜  在C++中,functions :: bad_function_call带有示例(1)

📅  最后修改于: 2023-12-03 15:07:52.633000             🧑  作者: Mango

在C++中,functions :: bad_function_call带有示例

std::bad_function_call是C++标准库定义的一个异常类,表示函数对象被调用但没有有效的函数对象。

函数对象是C++中的一类对象,其行为类似于函数,并且可以被调用和传递。函数对象可以使用函数指针或者重载了operator()的类实例化得到。

下面是一个使用函数对象的示例代码:

#include <iostream>
#include <functional>

int add(int x, int y) {
    return x + y;
}

struct Sub {
    int operator()(int x, int y) {
        return x - y;
    }
};

int main() {
    std::function<int(int, int)> f_add = add;
    std::function<int(int, int)> f_sub = Sub();

    std::cout << f_add(1, 2) << std::endl;
    std::cout << f_sub(3, 1) << std::endl;

    // 调用空函数对象,抛出异常
    std::function<int(int, int)> f_null;
    try {
        f_null(1, 2);
    } catch (const std::bad_function_call& e) {
        std::cout << "Error: " << e.what() << std::endl;
    }

    return 0;
}

在上面的示例代码中,我们使用了std::function来封装函数对象,并能够使用()进行调用。

为了演示std::bad_function_call的使用,在代码中刻意定义了一个空的函数对象f_null,在调用它的时候会抛出异常。

执行该程序将输出:

3
2
Error: call to empty std::function

这里异常的具体消息为call to empty std::function,可以使用what()方法获得。