C++ 通过指针调用静态成员函数
我在做一个小型的定制汇编程序 我有一个struc向量来存储操作码信息(助记符、参数的数量和类型、解析函数等等) 以及功能: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
{"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;
}
}
}