具有单个参数的布尔函数映射
Map of Boolean Functions with A Single Argument
我没有很多写C++的经验,我正在努力解决一个问题。下面的代码是从片段中抓取的。我正在编写一个类,我希望它具有字符串键和函数值的属性映射:
std::map< std::string, std::function<bool(std::string)> > selection_filters;
然后我想添加对,如下所示:
auto some_func = [] (std::string value) { return value == "some_val"; };
selection_filters["some_key"] = some_func;
//or
selection_filters.insert(std::make_pair("some_key", some_func));
这样我就可以:
if ( selection_filters["some_key"]("function param") == true ) {
//etc..
}
这会编译,但在运行时抛出错误:
terminating with uncaught exception of type std::__1::bad_function_call: std::exception
我怀疑这可能与映射定义中的std::function<bool(std::string)>
与 lambda 函数的使用之间的差异有关[] (std::string value) { ... };
我非常想保留lambda函数的使用以及通过地图上的下标运算符访问函数的可能性(map['some_key'](..)
(,但我对C++的了解不足以提出解决方案。
有人可以指出我犯的错误(以及为什么抛出它;我想学习(并提供改进建议?
请参阅导致 std::bad_function_call 的原因是什么?
函数缺失或为空。 在调用函数之前,请务必检查映射中是否存在"some_key",
if(selection_filters.find("some_key") != selection_filters.end())
或者至少检查函数是否具有有效的目标:
if(selection_filters["some_key"])
当您在std::map
上使用 []
运算符时,如果它尚未在映射中,它将插入默认构造对象(或零(。 这可能会(并且会(导致您未显式设置的键出现大量无效条目。
相关文章:
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 类中的虚拟布尔函数参数不起作用
- 我无法在 c++ 中调用布尔函数(已关闭)
- 如何使用布尔函数按降序对数组进行排序?
- 在布尔函数 c++ 中使用 elses
- 布尔函数在一段时间内不起作用
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 如何编写正确的"布尔"函数?
- 无法在 c++ 中" xor() "命名布尔函数
- 递归布尔函数的问题
- 布尔函数始终返回真正的 C++
- 具有单个参数的布尔函数映射
- 返回类型布尔函数中的声明语法错误
- 为什么我的布尔函数返回 true 会导致读取访问冲突?
- 单调布尔函数
- 布尔函数无法返回真或假
- 在C 中调用布尔函数
- 模板布尔函数没有<>,这是什么意思?