我想使用boost-python向python公开一个C++库。该库实际上包装了一个底层C api,因此使用了很多原始指针。Boost-Python原始指针构造函数
// implementation of function that creates a Request object
inline Request Service::createRequest(const char* operation) const
{
blpapi_Request_t *request;
ExceptionUtil::throwOnError(
blpapi_Service_createRequest(d_handle, &request, operation)
);
return Request(request);
}
// request.h
class Request {
blpapi_Request_t *d_handle;
Element d_elements;
Request& operator=(const Request& rhs); // not implemented
public:
explicit Request(blpapi_Request_t *handle);
Request(RequestRef ref);
Request(Request &src);
};
// request.cpp
BOOST_PYTHON_MODULE(request)
{
class_<blpapi_Request_t>;
class_<Request, boost::noncopyable>("Request", init<blpapi_Request_t *>())
.def(init<Request&>())
;
}
虽然request.cpp编译成功,当我尝试使用我收到以下错误的对象:
// error output
TypeError: No to_python (by-value) converter found for C++ type: class Request
中,为了调用这个Python代码的样子:
from session import *
from service import *
from request import *
so = SessionOptions()
so.setServerHost('localhost')
so.setServerPort(8194)
session = Session(so)
# start sesssion
if not session.start():
print 'Failed to start session'
raise Exception
if not session.openService('//blp/refdata'):
print 'Failed to open service //blp/refdata'
raise Exception
service = session.getService('//blp/refdata')
request = service.createRequest('ReferenceDataRequest')
其他对象(SessionOptions,Session,Service)等也是我已经成功创建boost-python包装的C++对象。
当我从升压Python文档这个有事情做与周围将原料指针理解,但我真的不知道我应该做些什么?
我已编辑原始帖子以显示调用createRequest的Python代码 – m0nonoke 2010-06-24 07:42:38
我编辑了我的答案。 python方面的用法给了我需要的提示,谢谢! – 2010-06-24 12:40:44