gpt4 book ai didi

c++ - Boost.Python 包装器中的纯虚拟重载运算符

转载 作者:行者123 更新时间:2023-11-28 03:35:29 25 4
gpt4 key购买 nike

我正在为一个抽象基类编写一个包装类,该基类有几个纯虚方法和一个重载运算符,如果我使用重载运算符进行编译,我会得到以下错误:

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==))
;

编辑:我什至不确定这是正确的方法,我在文档中没有看到任何这样的例子。

最佳答案

你有两个不同的签名:

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);
}

因此,您实际上并没有从基础实现纯虚拟,而是定义了一个新函数。

关于c++ - Boost.Python 包装器中的纯虚拟重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003452/

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