我正在使用一个实现命令外壳的 C 库。通过实现具有以下调用签名的函数来注册自定义 shell 命令:
typedef void(* shellcmd_t)(BaseSequentialStream *chp, int argc, char *argv[])
然后将该函数注册到一个静态结构中,该结构将字符串命令名称映射到该函数指针,如下所示:
static const ShellCommand commands[] = {
{"myfunction", myfunction},
{NULL, NULL}
}
myfunction 的样子:
void myfunction(BaseSequentialStream *chp, int argc, char *argv[])
{
// do some stuff
}
我正在使用 C++ 并希望将一些 shell 命令实现为类实例成员函数(不是静态成员函数)。有没有办法使用任何东西,<functional>
以便我可以从类实例成员函数中获取兼容的函数指针并将其注册到 ShellCommand 结构的数组中?我一直在阅读有关 std::bind 和 std::function 的内容,并且有点印象你可以给他们一个指向 C 风格函数的指针,但是你不能从他们,所以它似乎不起作用,但也许我只是错过了一些东西。
如果有人有解决这个问题的好方法,我很想听听。似乎我可能必须将它实现为一个平面 C 函数,然后可以调用一些东西,它会给它一个指向我想要的实例的指针/引用,然后一旦我有了它,我就可以将调用转发到该实例的成员函数。它看起来有点乱,希望有更好的方法。