c++ - 无论如何在标题中使用 boost python 包装器?

标签 c++ boost boost-python

是否可以在头文件中使用 BOOST_PYTHON_MODULE?例如,我希望能够声明这个模块

BOOST_PYTHON_MODULE(Status_Effect)
{
    boost::python::class_<StatusEffect>("StatusEffect")
        .def("GetPriority", &StatusEffect::GetPriority)
        .def("GetDescription", &StatusEffect::GetDescription)
        .def("GetName", &StatusEffect::GetName);
}

在头文件中。但是,每当我尝试时,它都会提示多个定义。有谁知道在头文件中进行包装的方法吗?

谢谢

最佳答案

这里有一个解决方法:括号内的只是普通的 C++ 代码。因此,您可以将该部分移动到内联函数中。

例如,您可以将其放入标题中:

inline void DeclareStatusEffect()
{
  boost::python::class_<StatusEffect>("StatusEffect")
    .def("GetPriority", &StatusEffect::GetPriority)
    .def("GetDescription", &StatusEffect::GetDescription)
    .def("GetName", &StatusEffect::GetName);

}

并将其放入您的源文件中:

BOOST_PYTHON_MODULE(Status_Effect)
{
  DeclareStatusEffect();
}

您还可以查看 BOOST_PYTHON_MODULE 宏的作用,也许有一种方法可以将更多内容放入 header 中,但是对于 future 版本的 Boost.Python,这样做可能不安全,即使如果你让它工作。

关于c++ - 无论如何在标题中使用 boost python 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348672/

相关文章:

c++ - 如何与其他 boost 库一起构建 boost::fiber?

c++ - 带有 LD_PRELOAD 和 boost::interprocess 的 mmap() 不起作用

c++ - 关于 C++ 模板和显式声明

c++ - 尝试在 C++ 中打开 CD 托盘时出错

javascript - 查看传递给抛出异常的构造函数的字符串

c++ - Boost mutex 在等待线程关闭时抛出错误

c++ - makefile 中的多个 gcc 版本

c++ - boost 函数的Python方法

c++ - 如何从 C++ 返回对动态类型的引用并将其保存在 Python 中?

c++ - 使用 boost.python 导入带有 opencv 调用的方法但由于编译后未找到符号而失败