将构造函数添加到boost :: python vector_indexing_suite暴露类

|| 我想添加一个构造函数以便执行此操作(我的字节为字符串,因为我使用的是python 2.6和2.7):
import myboostpymodule

d = \'serialised representation of a vector of some c++ objects\'

vec = myboostpymodule.MyVectorType(d)
我在哪里重载了向量构造函数以接受一个字符串,该字符串将包含序列化的数据,而MyVectorType用ѭ1公开:
namespace bp = boost::python;
bp::class_< std::vector<SomeType> >(\"MyVectorType\")
    .def(bp::vector_indexing_suite< std::vector<SomeType> >());
是否可以在不包装(通过子类化和boost :: python :: wrapper <...>)向量来添加构造函数的情况下执行此操作? 我可以告诉boost python使用静态方法(或普通函数)作为构造函数吗? 重要的是,我可以使用构造函数(而不是其他函数)从python创建向量。 我之所以这样做,是因为我想使向量的python实例可腌制,而且我所有的c ++类型都已经定义好了序列化(包括
std::vector<...>
),因此使用它腌制整个载体似乎很明智。一次,而不是允许python独立地对每个元素进行腌制1。 1,这似乎是一个性能更高的解决方案     
已邀请:
        我认为使用ѭ4不会帮助您,因为您需要使用构造函数。我查看了
boost::python::vector_indexing_suite
的定义,我认为您实际上可以定义自己的构造函数。 boost :: python中有一个函数可以指定您自己的命名构造函数。它通常用于实现返回ѭ6的工厂函数,但看起来像来自python的常规构造函数。您可以查看http://wiki.python.org/moin/boost.python/HowTo#named_constructors_.2BAC8_factories_.28as_Python_initializers.29作为示例。 如果复制您的清单并不昂贵,我认为您可以这样做:
using boost::python;
typedef std::vector<SomeType> MyVectorType;

MyVectorType makeMyVector(std::string myString)
{
    return CreateMyVectorType(myString);
}


class_<MyVectorType>(\"MyVectorType\")
    .def(vector_indexing_suite<MyVectorType>())
    .def(\"__init__\", make_constructor(makeMyVector));
但是,如果复制成本很高,则应该可以将其与链接中描述的shared_ptr工厂方法结合使用。     

要回复问题请先登录注册