【问题标题】:std::vector to boost::python::list without copy the datastd::vector 到 boost::python::list 而不复制数据
【发布时间】:2018-05-18 05:15:29
【问题描述】:

我的问题和std::vector to boost::python::list基本一样。不同之处在于我只需要在 python 端从 C++ 中 读取 数据。

天真地,我可以构建一个新的 C++ 类,其中包含一个指针并转发所有必需的属性,然后将这个新类公开给 python。是否有更好(更简单或系统)的方法来获取 python '列表'(不是真正的列表,因为不允许设置器)而不复制基础数据?

【问题讨论】:

    标签: python c++ boost-python


    【解决方案1】:

    如果您不想转换std::vector to boost::python::list。然后,如果您将向量的大小传递给 python 端并使用参数作为索引迭代函数以将向量的元素传递给 python 端,那么它是可能的。

    在 cpp 中:

    class vc
    {
        private:
            vector <int> vec ;
        public: 
            vc(){};
            void set_vector();
            int vector_size();
            int vector_iterator(int index);
            ~vc(){};
    }
    
    void vc::set_vector()
    {
        for(int i=0;i<10;i++)
            this->vec.push_back(i);
    }
    
    int vc::vector_size()
    {   
        return this->vec.size();
    }
    
    int vc::vector_iterator(int index)
    {   
        if(this->vec.size()> index)
            return  this->vec[index];
        return 0;
    }
    
    BOOST_PYTHON_MODULE(vector_imp)  
    {  
        class_<vc>("vc", init<>())
            .def("set_vector",&vc::set_vector)
            .def("vector_size",&vc::vector_size)  
            .def("vector_iterator",&vc::vector_iterator)
        ;  
    }
    

    在python中:

    import vector_imp as vect
        vc_obj = vect.vc()
        vc_obj.set_vector()
        v_size = vc_obj.vector_size()
        for i in range(0,v_size):
            element = vc_obj.vector_iterator(i)
            print element
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-24
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2020-10-11
      • 2013-04-10
      • 2011-02-23
      相关资源
      最近更新 更多