C++ 如何在boostpython中公开派生类函数

C++ 如何在boostpython中公开派生类函数,c++,abstract-class,boost-python,derived-class,C++,Abstract Class,Boost Python,Derived Class,我想在派生类(.h或.cpp文件)中实现expose模块。当我主要在一个BOOST_PYTHON_模块中公开它时,它的工作很好,但当我在抽象类和派生类中以不同方式公开它的get error一个或多个乘法定义的符号错误时。示例代码如下所示 **Base.h** class Base { public: virtual void Set(const std::vector<std::string>& AllParameters) =

我想在派生类(.h或.cpp文件)中实现expose模块。当我主要在一个BOOST_PYTHON_模块中公开它时,它的工作很好,但当我在抽象类和派生类中以不同方式公开它的get error一个或多个乘法定义的符号错误时。示例代码如下所示

 **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; 

           }
**Base.h**
阶级基础
{
公众:
虚空集(const std::vector&AllParameters)=0;
};
结构BaseWrap:Base,包装器
{
无效集(常量标准::向量和所有参数)
{
此->获取覆盖(“设置”)(所有参数);
}
**Base.cpp**
BOOST_PYTHON_模块(示例)
{
类(“基”)
.def(“Set”,纯虚拟(&Base::Set))
;
}
**导出的.h**
派生类:公共基
{
公众:
内部测试(内部测试a、内部测试b);
};
BOOST_PYTHON_模块(示例)
{
类(“派生”)
.def(“测试”和派生::测试)
;
}
**导出的.cpp**
void派生::测试(int a,int b)
{ 
返回a+b;
}
宏定义了一个基于所提供的参数的标识符函数。因此,在<代码> Base.CPP和派生代码中定义<代码>示例< /代码>模块。H < /C>在将它们链接到同一个库时违反了。ir拥有自己的函数(即
export\u base()
export\u-derived()
),并且有一个文件(
example.cpp
)它使用调用其他导出函数的主体定义了
BOOST\u PYTHON\u模块
。可以看到这种技术。

宏根据提供的参数定义了一个带有标识符的函数。因此,在
Base.cpp
Derived.h
中定义
示例
模块违反了链接时为了解决这个问题,考虑将每个单独的类导出到它们自己的函数中的函数体(即<代码> ExpXBaseBASE()/<代码>和<代码> ExpXPd派生()/代码>,并有一个文件(<代码>示例.CPP < /代码>)它使用一个调用其他导出函数的主体定义了
BOOST\u PYTHON\u模块