C++函数对象-函数包装器-(std::bad_function_call)
任何定义了函数调用操作符的对象都是函数对象。C++ 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。
函数包装器
std::function 提供存储任意类型函数对象的支持。
用空的 std::function 时抛出的异常
std::bad_function_call
class bad_function_call; | (C++11 起) |
std::bad_function_call
是若函数包装器无目标,则 std::function::operator()
将抛出的异常类型。
成员函数
(构造函数) | 构造 bad_function_call 对象 (公开成员函数) |
std::bad_function_call::bad_function_call()
bad_function_call() noexcept; |
构造新的 std::bad_function_call
实例。
继承图
参数
(无)
继承自 std::exception
成员函数
(析构函数) [虚] | 析构该异常对象 ( std::exception 的虚公开成员函数) |
what [虚] | 返回解释性字符串 ( std::exception 的虚公开成员函数) |
调用示例
#include <iostream>
#include <functional>
int main()
{
std::cout << std::boolalpha;
std::function<int()> function1 = nullptr;
std::cout << function1.target_type().name() << std::endl;
std::cout << typeid(function1).name() << " function1 bool : "
<< (function1 ? true : false) << std::endl;
try
{
function1();
}
catch (const std::bad_function_call& e)
{
std::cout << e.what() << std::endl;
}
std::function<bool(int)> function2 = [](int num)
{
return num % 2 == 1;
};
std::cout << function2.target_type().name() << " function2(1024): "
<< function2(1024) << std::endl;
std::cout << typeid(function2).name() << " function2 bool : "
<< (function2 ? true : false) << std::endl;
std::cout << typeid(function2).name() << " target_type() : "
<< (function2.target_type() == typeid(bool(*)(int)) ? true : false) << std::endl;
std::cout << typeid(function2).name() << " function2.target<bool(*)(int)>() : "
<< function2.target<bool(*)(int)>() << std::endl;
return 0;
}
输出
v
St8functionIFivEE function1 bool : false
bad_function_call
Z4mainEUliE_ function2(1024): false
St8functionIFbiEE function2 bool : true
St8functionIFbiEE target_type() : false
St8functionIFbiEE function2.target<bool(*)(int)>() : 0
原文地址:https://blog.csdn.net/qq_40788199/article/details/135719487
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!