提问者:小点点

不确定使用函数宏作为C++程序入口点的概念,


我完全不知道使用函数宏作为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
}

共1个答案

匿名用户

宏将函数定义为Python模块的入口点,而不是C程序的入口点。

CPython扩展是DLLs,因此没有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调用。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(不确定|函数|宏|c++|程序|入口|点|概念)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?