C++ error:[ invalid operands to binary expression ('std::map<int, std::function<void ()>, std::less<int>...]
C++ error:[ invalid operands to binary expression ('std::map<int, std::function<void ()>, std::less<int>...]
使用以下代码:
#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 (*)()')
为什么我可以将函数指针分配给地图,但我无法将它与函数指针进行比较?
另外,如果没有定义键,映射会怎样return?
有没有办法比较 std::function
以便我可以查看它是空函数指针还是已经定义?
或者对此有更好的解决方案吗?最初,我使用 while(1)
循环来捕获线程,而映射只是变量到达键 (int) 时程序应该执行的操作的映射。该变量在单独的任务中更改,因此它是多任务处理。我无法使用 .contains()
方法,因为我还没有使用 C++ 20。
标准classstd::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;
所以你只能检查class的对象是否是"empty"。
仅供参考。答案引用自@0x499602D2 和@LightnessRacesInOrbit。
要么使用:
if (fnc_event_to[2]){
}
或
if(fnc_event_to.find(2) != fnc_event_to.end()){
}
请注意,第一个选项将创建一个空元素,因此如果您为地图赋予相同的值,它将已经创建,并且它将 return 为真。
使用以下代码:
#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 (*)()')
为什么我可以将函数指针分配给地图,但我无法将它与函数指针进行比较?
另外,如果没有定义键,映射会怎样return?
有没有办法比较 std::function
以便我可以查看它是空函数指针还是已经定义?
或者对此有更好的解决方案吗?最初,我使用 while(1)
循环来捕获线程,而映射只是变量到达键 (int) 时程序应该执行的操作的映射。该变量在单独的任务中更改,因此它是多任务处理。我无法使用 .contains()
方法,因为我还没有使用 C++ 20。
标准classstd::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;
所以你只能检查class的对象是否是"empty"。
仅供参考。答案引用自@0x499602D2 和@LightnessRacesInOrbit。 要么使用:
if (fnc_event_to[2]){
}
或
if(fnc_event_to.find(2) != fnc_event_to.end()){
}
请注意,第一个选项将创建一个空元素,因此如果您为地图赋予相同的值,它将已经创建,并且它将 return 为真。