我想使用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