使用纯虚函数在boost python中的多个派生类

用户名

如何通过使用Boost python将纯虚函数用于多重继承。我得到的错误是'Derived1'无法实例化抽象类。和'Derived2'无法实例化抽象类。如果只有一个派生类,但有多个派生类,则此代码有效。感谢帮助。

class Base
{
  public:
   virtual int test1(int a,int b) = 0;
   virtual int test2 (int c, int d) = 0;
   virtual ~Base() {}
 };

class Derived1
  : public Base
 {
   public:
   int test1(int a, int b) { return a+b; }
};

class Derived2
 : public Base
{
  public:
  int test2(int c, int d) { return c+d; }
};
struct BaseWrap
  : Base, python::wrapper<Base>
{
  int test1(int a , int b) 
  {
     return this->get_override("test")(a, b);
   }
  int test2(int c ,int d)
   {
     return this->get_override("test")(c, d);
    }
};

BOOST_PYTHON_MODULE(example) 
{
  python::class_<BaseWrap, boost::noncopyable>("Base")
   .def("test1", python::pure_virtual(&BaseWrap::test1))
   .def("test2", python::pure_virtual(&BaseWrap::test2))
   ;

  python::class_<Derived1, python::bases<Base> >("Derived1")
   .def("test1", &Derived1::test1)
   ;

   python::class_<Derived2, python::bases<Base> >("Derived2")
   .def("test2", &Derived2::test2)
   ;   
}
坦纳·桑斯伯里(Tanner Sansbury)

错误消息表明它们都不是Derived1Derived2不能被实例化,因为它们是抽象类:

  • Derived1具有纯虚函数:int Base::test2(int, int)
  • Derived2具有纯虚函数:int Base::test1(int, int)

当通过暴露其中任何boost::python::class_一个时,将发生编译器错误。class_HeldType默认值为公开的类型,并且HeldType在Python对象中构造。因此,python::class_<Derived1, ...>将实例化Boost.Python模板,这些模板试图创建动态类型为的对象Derived1,从而导致编译器错误。

BaseWrap由于BaseWrap实现了所有纯虚函数该错误不会以出现boost::python::pure_virtual()函数指定如果未在C ++或Python中重写函数,Boost.Python将在分发过程中引发“纯虚拟调用”异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Boost :: Python包装纯虚函数

来自分类Dev

在派生类对象作为参数的基类中声明纯虚函数

来自分类Dev

在派生类对象作为参数的基类中声明纯虚函数

来自分类Dev

如何在Boost Python中公开派生类函数

来自分类Dev

Boost.Python中的基类和派生类

来自分类Dev

从派生的模板类重写纯虚函数

来自分类Dev

为什么派生类中的虚函数也虚拟?

来自分类Dev

使用纯虚函数定义在C ++类之外?

来自分类Dev

使用纯虚函数在C ++类之外定义?

来自分类Dev

派生类的虚函数调用基类的虚函数

来自分类Dev

对派生类中的成员变量使用派生类型

来自分类Dev

派生类不使用来自基类的所有纯虚方法

来自分类Dev

从派生类中删除虚拟函数

来自分类Dev

在派生类中重载了最终函数

来自分类Dev

派生类中的模板函数参数

来自分类Dev

派生类中的重载构造函数

来自分类Dev

当派生类中的函数无法覆盖基类中的虚函数时发出警告

来自分类Dev

从模板化类重写纯虚函数

来自分类Dev

具有纯虚函数实现的类

来自分类Dev

从模板基类覆盖纯虚函数

来自分类Dev

如何从Boost Python中的抽象类访问派生类对象

来自分类Dev

为什么基类指针指向基类中的纯虚方法而不是派生类中的重写方法?

来自分类Dev

boost::bind 不能绑定到纯虚基类中定义的非静态函数模板成员类型

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

C ++ 11中的纯虚函数

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

在C ++中从派生类的析构函数调用虚函数

来自分类Dev

C ++继承:使用派生类的实例调用基类的虚函数

来自分类Dev

如何使虚函数接受仅在派生类中定义的数据类型?

Related 相关文章

热门标签

归档