C++ 通过指针调用静态成员函数

C++ 通过指针调用静态成员函数,c++,data-structures,function-pointers,C++,Data Structures,Function Pointers,我在做一个小型的定制汇编程序 我有一个struc向量来存储操作码信息(助记符、参数的数量和类型、解析函数等等) 以及功能: {"MOV", 2, {T_REGISTER | T_ADDRESS, T_REGISTER | T_ADDRESS | T_CONSTANT}, 1, &Opcodes::MOV}, class Opcodes { public: static Tryte Opcodes::MOV(std::vector<std::string> _opMa

我在做一个小型的定制汇编程序

我有一个struc向量来存储操作码信息(助记符、参数的数量和类型、解析函数等等)

以及功能:

{"MOV", 2, {T_REGISTER | T_ADDRESS, T_REGISTER | T_ADDRESS | T_CONSTANT}, 1, &Opcodes::MOV},
class Opcodes
{
public:
    static Tryte Opcodes::MOV(std::vector<std::string> _opMap) {
        return Tryte(0);
    }
};
我想在没有实例化操作码对象的情况下调用我的函数,可能吗

编辑:

我的错误在这里:
if(!op_tab[j].opcode.compare(opMap[i][2])

我的助记符是opMap的第一项,您的代码似乎是正确的,因此调试器信息可能会有所帮助。 但是我们可以尝试使用std::函数来提高代码的友好性:

typedef char    args_type_t;

#include <functional>
typedef struct  op_s {
    std::string     opcode;
    char            nbr_args;
    args_type_t     type[4];
    int             code;
    std::function<Tryte(std::vector<std::string>>)>  fct;
} op_t;
typedef char args\u type\t;
#包括
类型定义结构操作{
字符串操作码;
char nbr_args;
args_type_t type[4];
int代码;
std::function)>fct;
}手术室;
至于sefgault,给我们回溯。 另外,尝试使用基于范围的for,因为它不需要转换映射来再次获取元素(就像您在内部循环中所做的那样)

for(自动操作:opMap){
用于(自动选项卡:操作选项卡){
如果(!tab.opcode.compare(op[1])){

std::cout Try
(op_tab[j].fct)(opMap[i]).str()
。大括号对于分组很重要,因为
fct
是指向函数的指针,而不是成员函数。thx,但我发现了我的问题:!op_tab[j].opcode.compare(opMap[i][2])在我的opMap中助记符位于位置1而不是2>
for (int i = 0; i < opMap.size(); i++) {
    for (int j = 0; j < op_tab.size(); j++) {
        if (!op_tab[j].opcode.compare(opMap[i][2])) {
            std::cout << "OPBYTE : " << op_tab[j].fct(opMap[i]).str() << std::endl;
        }
    }
}
typedef char    args_type_t;

#include <functional>
typedef struct  op_s {
    std::string     opcode;
    char            nbr_args;
    args_type_t     type[4];
    int             code;
    std::function<Tryte(std::vector<std::string>>)>  fct;
} op_t;
for (auto op : opMap) {
    for (auto tab : op_tab) {
        if (!tab.opcode.compare(op[1])) {
            std::cout << "OPBYTE : " << tab.fct(op).str() << std::endl;
        }
    }
}
enum Columns {
    FuncPointer,
    UserData
}

for (auto op : opMap) {
    for (auto tab : op_tab) {
        if (!tab.opcode.compare(op[FuncPointer])) {
            std::cout << "OPBYTE : " << tab.fct(op).str() << std::endl;
        }
    }
}