OK, I managed to have this working, see the attached file.<br>Is this the correct way of doing it? Especially in the static member "construct" of struct "DateFromPy".<br>Thank You<br>Luca<br><br><div><span class="gmail_quote">
On 10/04/07, <b class="gmail_sendername">Luca Sbardella</b> <<a href="mailto:luca.sbardella@gmail.com">luca.sbardella@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
sorry missing<br><br>typedef boost::gregorian::date qm_date<br><br>in the code<div><span class="e" id="q_111dd7d5ca67a5ff_1"><br><br><br><br><br><div><span class="gmail_quote">On 10/04/07, <b class="gmail_sendername">Luca Sbardella
</b> <<a href="mailto:luca.sbardella@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
luca.sbardella@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Thanks Roman, it was useful, however I'm getting some specific problem in the implementation (I cannot debug the code since I cannot load the PyDateTime
static library). the Python
documentation says I should declare PyDateTime_IMPORT but this does not
compile!!!!<br>Still trying at the moment but this is what I have done, any comment would be welcome.<br>Best<br>Luca<br><br> <br> template<class T, class TfromPy><br> struct ObjFromPy<br> {<br> ObjFromPy()
<br> {<br> boost::python::converter::registry::push_back(&TfromPy::convertible,
<br> &TfromPy::construct,<br> boost::python::type_id<T>());<br>
}<br> };<br> //<br> template<class T, class TtoPy, class TfromPy><br> struct register_python_conversion<br> {<br> register_python_conversion()<br> {<br> boost::python::to_python_converter<T,TtoPy>();
<br> ObjFromPy<T,TfromPy>();<br> }<br> };<br> //<br> // IMPLEMENTATION<br> //<br> struct DateToPy<br> {<br> static PyObject* convert(const qm_date& dte)<br> {<br> return PyDate_FromDate(
dte.year(), dte.month(), dte.day());<br> }<br> };<br> //<br> struct DateFromPy<br> {<br> //<br> static void* convertible(PyObject* obj_ptr)<br> {<br> if(!PyDate_Check(obj_ptr)) return 0;
<br> return obj_ptr;<br> }<br> //<br> static void construct(PyObject* obj_ptr,<br> boost::python::converter::rvalue_from_python_stage1_data* data)<br> {<br> int y = PyDateTime_GET_YEAR(obj_ptr);
<br> int m = PyDateTime_GET_MONTH(obj_ptr);<br> int d = PyDateTime_GET_DAY(obj_ptr);<br> qm_date* dte = new qm_date(y,m,d);<br> data->convertible = (void*)dte;<br> }<br> };<br> //
<br> //<br> typedef register_python_conversion<qm_date, DateToPy, DateFromPy> date_python_conversion;<br> //<br><br><div><div><span><span class="gmail_quote">On 10/04/07,
<b class="gmail_sendername">Roman Yakovenko</b>
<<a href="mailto:roman.yakovenko@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">roman.yakovenko@gmail.com</a>> wrote:</span></span></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><span>
<div><span>On 4/10/07, <b class="gmail_sendername">Quant Mind</b> <<a href="mailto:quant.mind@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">quant.mind@gmail.com
</a>> wrote:</span></div><div><div><span><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Here is the problem.<br>I'm using boost date_time library for a calendar C++ application. I exposed my C++ Calendar class to Python using boost python and everything is going smoothly.<br>The class contains several functions which have boost::gregorian::date as arguments.
<br>Obviously, this class is not know to Python and I would like to implement a custom converter between boost::gregorian::date and Python datetime.date.<br>What would be the correct way to deal with this problem?</blockquote>
</span></div><div><br>Let me know if next link helped you: <a href="http://language-binding.net/pyplusplus/troubleshooting_guide/automatic_conversion/automatic_conversion.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://language-binding.net/pyplusplus/troubleshooting_guide/automatic_conversion/automatic_conversion.html
</a><br></div><br></div><br>-- <br>Roman Yakovenko<br>C++ Python language binding<br><a href="http://www.language-binding.net/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.language-binding.net/
</a>
<br></span></div>_______________________________________________<br>C++-sig mailing list<br><a href="mailto:C++-sig@python.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">C++-sig@python.org</a>
<br><a href="http://mail.python.org/mailman/listinfo/c++-sig" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://mail.python.org/mailman/listinfo/c++-sig</a><br><br></blockquote></div><br>
</blockquote></div><br>
</span></div></blockquote></div><br>