std::function 到 return 值是否可能?

Is it possible for a std::function to return a value?

因此,对于我目前正在进行的项目,我正在尝试创建一种 "Function lookup table",基本上是字符串到函数的映射。该函数接收数据,对其进行修改,然后将其吐出。但是,std::function 到 return 似乎不可能。

我尝试的(对std::function不太了解)只是简单地写成这样;

map<string, function<Array(vector<pair<char, string>>)>>

或者更具体地说,

function<Array(vector<pair<char, string>>)>

(数组是我自己的 class,但其他一切都在 std 中)

如果我写的时候没有 return;

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 或任何类似方法 return 一个值,还是我完全误解了这个?

编辑: 这是问题中涉及的代码 Main Class(缩写,可能有额外的包含):

#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;
}

数组ClassHeader:

#ifndef ARRAY_H_
#define ARRAY_H_

struct Array {
public:
    Array();
    Array(char* data, int size);
    virtual ~Array();

    char* data;
    int size;
};

#endif /* ARRAY_H_ */

数组Class 来源:

#include "Array.h"

Array::Array() {
    data = nullptr;

    size = 0;
}

Array::Array(char* data, int size) {
    this -> data = data;
    this -> size = size;
}

Array::~Array() {}

你的问题是你的函数 returns 是一个 Array 类型的对象,而不是指向它的指针。所以返回 nullptr 显然会导致编译错误。尝试返回一个空数组。

{ 
    "MOV", 
    [](vector<pair<char, string>> operands) {
        return Array();
    }
}