使用以下代码:
#include <map>
#include <functional>
#include "main.h"
std::map<int,std::function<void()>> fnc_event_to;
void testFunction();
void initialize() {
fnc_event_to[1] = testFunction;
bool boolean = fnc_event_to[2] == testFunction;//<- error
pros::lcd::initialize();
pros::lcd::print(2,"%d",boolean);
}
我收到此错误:
invalid operands to binary expression ('std::map<int, std::function<void ()>, std::less<int>, std::allocator<std::pair<const int, std::function<void ()> > > >::mapped_type' (aka 'std::function<void ()>') and 'void (*)()')
为什么我可以将功能指针分配给映射,但无法将其与功能指针进行比较?
此外,如果未定义键,则映射将返回什么?
有没有一种比较std::function
的方法,所以我可以看到它是否为空函数指针或已经定义了?
或者对此有更好的解决方案吗?最初,我使用while(1)
循环来捕获线程,并且该映射只是当变量到达key(int)时程序应该执行的操作的映射。变量在单独的任务中更改,因此它是多任务的。由于我尚未使用C ++ 20,因此无法使用.contains()
方法。
答案 0 :(得分:3)
此信息仅供参考。答案引用自@ 0x499602D2和@LightnessRacesInOrbit。 可以使用:
if (fnc_event_to[2]){
}
或
if(fnc_event_to.find(2) != fnc_event_to.end()){
}
请注意,第一个选项将创建一个空元素,因此,如果为地图提供相同的值,则将已经创建它,并且它将返回true。
答案 1 :(得分:0)
标准类std :: function只有这些比较运算符==
template<class R, class... ArgTypes>
bool operator==(const function<R(ArgTypes...)>&, nullptr_t) noexcept;
template<class R, class... ArgTypes>
bool operator==(nullptr_t, const function<R(ArgTypes...)>&) noexcept;
因此,您只能检查该类的对象是否为“空”。