C++ Boost.Python包装中的纯虚拟重载运算符
我正在为一个抽象基类编写一个包装类,基类有两个纯虚方法和一个重载运算符,如果使用重载运算符编译,则会出现以下错误:C++ Boost.Python包装中的纯虚拟重载运算符,c++,boost,boost-python,C++,Boost,Boost Python,我正在为一个抽象基类编写一个包装类,基类有两个纯虚方法和一个重载运算符,如果使用重载运算符编译,则会出现以下错误: cannot allocate an object of abstract type 尽管我在包装器类中实现了重载运算符,但是Boost.Python仍然坚持认为它没有实现,有什么线索吗 这就是我的代码的样子: //abstract base class class Test { public: virtual void start() = 0; virt
cannot allocate an object of abstract type
尽管我在包装器类中实现了重载运算符,但是Boost.Python仍然坚持认为它没有实现,有什么线索吗
这就是我的代码的样子:
//abstract base class
class Test
{
public:
virtual void start() = 0;
virtual void stop() = 0;
virtual bool operator==(const Test rhs) = 0;
};
//wrapper class
struct TestWrapper: Test, wrapper<Test>
{
public:
void start()
{
this->get_override("start")();
}
void stop()
{
this->get_override("stop")();
}
bool operator==(const Test& rhs)
{
return this->get_override("operator==")(rhs);
}
};
//boost python module
class_<TestWrapper, boost::noncopyable>("Test")
.def("start", pure_virtual(&Test::start) )
.def("stop", pure_virtual(&Test::stop) )
.def("operator==", pure_virtual(&Test::operator==))
;
//抽象基类
课堂测试
{
公众:
虚拟void start()=0;
虚空停止()=0;
虚拟布尔运算符==(常数测试rhs)=0;
};
//包装类
结构TestWrapper:测试,包装
{
公众:
void start()
{
这个->获取覆盖(“开始”)();
}
无效停止()
{
此->获取覆盖(“停止”)();
}
布尔运算符==(常量测试和rhs)
{
返回此->获取覆盖(“运算符==”)(rhs);
}
};
//boostpython模块
类别("测试")
.def(“开始”,纯虚拟(&测试::开始))
.def(“停止”,纯虚拟(&测试::停止))
.def(“运算符==”,纯虚拟(&Test::运算符==))
;
编辑:我甚至不确定这样做是否正确,我在文档中没有看到任何类似的示例。您有两个不同的签名:
class Test
{
public:
virtual void start() = 0;
virtual void stop() = 0;
virtual bool operator==(const Test rhs) = 0; // takes rhs by value
};
在派生类中:
bool operator==(const Test& rhs) // takes rhs by reference
{
return this->get_override("operator==")(rhs);
}
因此,您实际上并不是从基础上实现纯虚拟,而是定义了一个新函数。这是第一个问题,另一个问题是其中一个函数是常量成员,您也让我意识到了这一点,非常感谢:)