c++ - std::function 是否有可能返回一个值?
问题描述
因此,对于我目前正在进行的一个项目,我正在尝试创建一种“函数查找表”,基本上是字符串到函数的映射。该函数接收数据,对其进行修改,然后将其吐出。但是, std::function 似乎不可能返回任何内容。
我尝试的(对 std::function 不太了解)只是简单地这样写;
map<string, function<Array(vector<pair<char, string>>)>>
或者更具体地说,
function<Array(vector<pair<char, string>>)>
(数组是我自己的类,但其他一切都在标准中)
如果我写它没有回报;
function<void(vector<pair<char, string>>)>
它工作正常。
gcc给出的错误是;
no matching constructor for initialization of 'map<std::__1::string, function<Array (vector<pair<char, std::__1::string> >)> >'
有什么方法可以使用 std::function 或任何类似方法返回一个值,还是我完全误解了这一点?
编辑:这是问题主类中涉及的代码(缩短,可能有额外的包含):
#include <iostream>
#include <map>
#include <array>
#include <fstream>
#include <algorithm>
#include <vector>
#include <functional>
#include "Array.h"
using namespace std;
int main() {
map<string, function<Array(vector<pair<char, string>>)>> dictionary =
{
{
"JMP",
[](vector<pair<char, string>> operands) {
if (operands.size() == 1) {
char data[2];
switch (operands[0].first) {
case 3:
data[1] = static_cast<char>(bitset<8>(operands[0].second.substr(1, 2)).to_ulong());
break;
case 4:
data[1] = static_cast<char>(bitset<8>(operands[0].second.substr(2, 8)).to_ulong());
break;
case 5:
data[1] = static_cast<char>(bitset<8>(operands[0].second.substr(2, 8)).to_ulong());
break;
default:
exit(0);
}
data[0] = 0b00000001;
return Array(data, 2);
}
else {
exit(2);
}
}
},
{
"MOV",
[](vector<pair<char, string>> operands) {
return nullptr;
}
}
};
return 0;
}
数组类头:
#ifndef ARRAY_H_
#define ARRAY_H_
struct Array {
public:
Array();
Array(char* data, int size);
virtual ~Array();
char* data;
int size;
};
#endif /* ARRAY_H_ */
数组类来源:
#include "Array.h"
Array::Array() {
data = nullptr;
size = 0;
}
Array::Array(char* data, int size) {
this -> data = data;
this -> size = size;
}
Array::~Array() {}
解决方案
您的问题是您的函数返回 Array 类型的对象,而不是指向它的指针。所以返回 nullptr 显然会导致编译错误。尝试返回一个空数组。
{
"MOV",
[](vector<pair<char, string>> operands) {
return Array();
}
}
推荐阅读
- javascript - 从反应到节点以正确的格式发送数据
- sql - 在 SQL 中查找发生变化的行,但仅保留某些更改,同时保留其他更改
- java - 如何在java中为lombok调用getter和setter方法?
- javascript - 无法加载 Mineflayer 插件 AutoEat
- python - 如何通过 logging.config.dictConfig 指定命名器和旋转器 - FileHandler
- javascript - 如何在没有 useEffect 的 React 组件中使用异步等待
- autodesk-forge - B360 Autodesk Forge 未从链接文件中获取房间几何图形
- python - 我正在尝试在 tkinter 中创建新窗口后创建一个新窗口并执行一个函数
- sql-server - SQL SSMS 键盘快捷键查找案例语句的结尾
- javascript - 什么 window.location.href 在页面中返回?