如何在 Boost Python 中访问 Vector
how to access vector in boost python
我想通过使用boost python访问python中的c ++向量。 向量在派生类函数中作为参数传递。但是我得到了错误。示例代码如下
class Base
{
public:
virtual void Set(const std::vector<std::string>& AllParameters) = 0;
};
class derived: public Base
{
void Set(const std::vector<std::string>& AllParameters)
{
// some code here
};
main.cpp
struct Basewrapper : Base, wrapper<Base>
{
void Set(const std::vector<std::string>& AllParameters)
{
this->get_override("Set")(AllParameters);
};
BOOST_PYTHON_MODULE(Example)
{
class_<Basewrapper , boost::noncopyable> ("Base")
.def("Set",pure_virtual(&Base::Set))
;
}
问题是当我从 Python 发送列表时,它给出的错误与 C++ 签名不匹配。感谢您的帮助
当我处理这种情况时,我通常的方法是,由于我无论如何都要为绑定编写一个包装器类,所以我可以创建使用 python 类型的"代理"函数。
boost 确实提供了轻松进行转换的功能,因此您只需使用代理函数中的函数即可。当然,要转换为实际std::vector
您必须复制数据。如果列表可能非常大并且您不想这样做,则由您的C++类采用某种抽象迭代器。
在您的情况下,您可以创建一个名为 BaseProxy 的类,该类具有指向 Base 的指针/引用/共享 ptr,并具有一个名为 Set 的方法(或在您的 .def 中称为 Set),该方法获取 boost python 对象并将其转换为向量,然后对C++对象进行适当的调用。在这种情况下,它返回 void,但如果C++函数返回某些内容,则也会返回任何合适的内容。
相关文章:
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 如何访问vector<pair<int, pair<int, int>>> D[20]?
- 访问 vector 中的子结构体值
- 通过 vector.begin() 命令访问 vector 的第一个元素
- 如何在 Boost Python 中访问 Vector
- 使用move_iterator访问vector
- 访问vector的vector中的c++ vector而不复制它
- 如何使用常量引用访问 vector<int*> 的元素?
- 在c++中访问vector中的数组
- 当访问Vector中的实例时,shared_ptr的Vector给出seg错误
- 访问vector元素属性的最佳方法
- 访问vector的内容
- 在pop_back()之后无法访问vector(分段错误)
- 访问Vector的元素- c++
- 使用std::vector::at或std::vector::operator[]访问vector:中存储的对象
- 如何在c++中从指向vector的指针访问vector的内容
- 使用迭代器访问 vector<std::unique_ptr > 的元素<T>?
- 在类函数中访问vector的元素
- 通过多个线程访问vector