gpt4 book ai didi

c++ - 如何在boost python中公开派生类函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:04 25 4
gpt4 key购买 nike

我想在派生类(.h 或 .cpp 文件)中实现公开模块。它的工作正常,当我在一个 BOOST_PYTHON_MODULE 的 main 中公开它但是当我在抽象类和派生类中以不同方式公开时,它会出现错误一个或多个多重定义的符号错误。示例代码如下。 p>

 **Base.h**

class Base
{
public:
virtual void Set(const std::vector<std::string>& AllParameters) = 0;
};

struct BaseWrap : Base, wrapper<Base>
{
void Set(const std::vector<std::string>& AllParameters)
{
this->get_override("Set")(AllParameters);

}

**Base.cpp**

BOOST_PYTHON_MODULE(Example)
{
class_<Basewrapper , boost::noncopyable> ("Base")
.def("Set",pure_virtual(&Base::Set))
;
}

**Derived.h**

class Derived : public Base
{
public:
int test(int a, int b);

};
BOOST_PYTHON_MODULE(Example)
{
class_<Derived , boost::noncopyable> ("Derived")
.def("test",&Derived ::test)
;
}

**Derived.cpp**


void Derived:: test(int a , int b)

{
return a+b;

}

最佳答案

BOOST_PYTHON_MODULE宏根据提供的参数定义带有标识符的函数。因此,在 Base.cppDerived.h 中定义 Example 模块违反了 one definition rule将它们链接到同一个库时。要解决此问题,请考虑将导出每个单独类的函数体拆分为它们自己的函数(即 export_base()export_derived()),并使用单个文件 (example.cpp),它定义了 BOOST_PYTHON_MODULE,其主体调用了其他导出函数。这个技术可以看here .

关于c++ - 如何在boost python中公开派生类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com