【发布时间】:2019-07-23 15:00:56
【问题描述】:
使用以下代码:
#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) 循环来捕获线程,并且映射只是当变量到达键(int)时程序应该做什么的映射。该变量在单独的任务中更改,因此它是多任务处理。我不能使用.contains() 方法,因为我还没有使用 C++ 20。
【问题讨论】:
-
你试过
fnc_event_to[2] == std::function<void()>(testFunction)吗?无论如何,您可能会感到失望,因为所有非空std::function对象比较不相等。 -
我试过
std::function<void()>(testFunction),它显示这个错误: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 'std::function<void ()>') -
不能使用
.contains()方法真的很遗憾。这会让我的生活轻松很多。还是不支持c++ 20 -
或者有更好的解决方案吗?最初,我使用 while(1) 循环来捕获线程,并且映射只是当变量到达键(int)时程序应该做什么的映射。该变量在单独的任务中更改,因此它是多任务处理。我无法使用
.contains()method,因为我还没有使用 c++ 20
标签: c++ function function-pointers stdmap std-function