pybind11:从 c/c++ 获取 python 函数的参数数量

pybind11: from c/c++ get number of arguments to python function

在pybind11中,我有一个pybind11::function类型的变量。在 C++ 中,有什么方法可以确定该函数需要多少个参数?也就是说,如果它来自 def f(a, b),答案将是 2。我意识到这可能会变得疯狂 w/r *arks、kwargs、self 等...

需要说明的是,这是在 C++ 内部,所以我正在寻找 C++ 代码。

下面是如何使用 inspect.signature():

from inspect import signature

import os # I only imported os to demonstrate with one of its functions

print(signature(os.remove)) # Print out the arguments for the remove fumction from the os module

输出:

(path, *, dir_fd=None)

下面是如何在 pybind11 中执行此操作:

#include <pybind11/pybind11.h>
#include <pybind11/embed.h>
pybind11::function callback_; // from somewhere!
pybind11::module inspect_module = pybind11::module::import("inspect");
pybind11::object result = inspect_module.attr("signature")(callback_).attr("parameters");
auto num_params = pybind11::len(result);
// num_params is an int