我完全不知道使用函数宏作为C++程序入口点的概念,特别是参考下面列出的示例C++代码。
找到示例代码的网站(https://docs.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2019#convert-the-c-projects-to-extensions-for-python)说:1)下面的代码创建了一个名为PYBIND11_MODULE的宏。2)它将它建立为入口点。我无法理解这个语句,因为我认为:1)宏需要使用“#define”预编译指令来定义。在下面的示例代码中,PYBIND11_MODULE{}没有“#define”。2)我
非常感谢!
namespace py = pybind11;
PYBIND11_MODULE(superfastcode2, m) {
m.def("fast_tanh2", &tanh_impl, R"pbdoc(
Compute a hyperbolic tangent of a single argument expressed in radians.
)pbdoc");
#ifdef VERSION_INFO
m.attr("__version__") = VERSION_INFO;
#else
m.attr("__version__") = "dev";
#endif
}
宏将函数定义为Python模块的入口点,而不是C
程序的入口点。
CPython扩展是DLL
s,因此没有main
,只有函数。
PYBIND11_MODULE(superfastcode2, m) {
m.def("fast_tanh2", &tanh_impl, R"pbdoc(
Compute a hyperbolic tangent of a single argument expressed in radians.
)pbdoc");
}
医生说:
PYBIND11_MODULE()宏创建一个函数,当从Python内部发出导入语句时将调用该函数。 模块名称(示例)作为第一个宏参数给出(它不应该在引号中)。 第二个参数(m)定义了一个类型为py::module的变量,它是创建绑定的主接口。
宏将扩展为一些代码,这些代码最终将在DLL
加载时被Python调用。