私はこの次の構造体を持っています
typedef struct s_ins
{
std::string item;
int extended;
void (CPU::*fc)(std::list<std::string> &list>;
} t_ins;
次に、配列を宣言します。ここで、トークンを関数でリダイレクトする必要があります
t_ins g_ins[] =
{
{"push", 1, &CPU::ins_push},
{"pop", 0, &CPU::ins_pop},
{"dump", 0, &CPU::ins_dump},
{"assert", 1, &CPU::ins_assert},
{"add", 0, &CPU::ins_add},
{"sub", 0, &CPU::ins_sub},
{"mul", 0, &CPU::ins_mul},
{"div", 0, &CPU::ins_div},
{"mod", 0, &CPU::ins_mod},
{"print", 0, &CPU::ins_print},
{"exit", 0, &CPU::ins_exit},
{"", 0, 0}
};
最後に、これは私がそれを(CPU関数メンバーで)呼び出す方法です:
(*g_ins[i].fc)(tokens);
私が得るものは:
cpu.cpp: In member function ‘void CPU::get_instruction(std::list<std::basic_string<char> >&)’:
cpu.cpp:40:16: error: invalid use of unary ‘*’ on pointer to member
私はそれを呼び出すために他の多くの方法を試しましたが、それでもいくつかのエラーがあります。これが私の考え方です。g_ins[i].fcを使用して関数にアクセスし、*を使用して関数メンバーポインターであることを伝え、パラメーターを渡します。関数メンバーポインタの同じクラスの関数で使用しているので、「これ」であるため、以前にオブジェクトを用意する必要はありません。
ありがとう