gpt4 book ai didi

c++ - std::function 是否有可能返回一个值?

转载 作者:行者123 更新时间:2023-11-28 01:19:45 27 4
gpt4 key购买 nike

因此,对于我目前正在进行的项目,我正在尝试创建一种“函数查找表”,基本上是字符串到函数的映射。该函数接收数据,对其进行修改,然后将其吐出。但是,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();
}
}

关于c++ - std::function 是否有可能返回一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com