[C++-sig] Boost tuple example? (original) (raw)

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Fri Dec 9 13:42:29 CET 2005


--- Matt <mjkeyes at sbcglobal.net> wrote:

void SetValues(handle <> hObject) { object oObj(hObject);

I'd make this

void SetValues(object& oObj) {

tuple Values("value 1", 2, 3.0);

Does this work? I was thinking you need

   tuple Values = make_tuple("value 1", 2, 3.0);

but I am not sure.

//call a python function to set the values, etc... in oObj }

void GetValues(handle <>hObject) { object oObj(hObject);

Same as above:

void GetValues(object& oObj) {

Or if you are expecting a tuple this may be even better:

void GetValues(tuple oValues)

tuple oValues; //call Python function to retrieve a tuple object into oValues //not quite sure what this would look like - i know //tuple is an object, but should i try/catch a call to a python //function into a tuple variable?

try {

I don't think it is advisable to use try + catch() here. Just let the exception propagate through to Python.

const char * szVal = extract<const char *>(oValues[0]); int nVal = extract(oValues[1]); double nDblVal = extract(oValues[2]);

I believe this works on most compilers, but not all. I always do it like this:

        const char * szVal = extract<const char *>(oValues[0])();

I.e. with an additional "()" at the end. Similar for the two other extract<> statements.

} catch(...) { PyErrPrint(); } }

Does that seem reasonable? Also, is there an easy way to determine the length of a tuple in C++?

David insisted on not giving us .size(), much to my dismay. Therefore you have to say:

#include <boost/python/detail/api_placeholder.hpp>

and then:

boost::python::len(obj)

David: I still believe we should add .size() to tuple, list, str. The current solution is a real productivity killer; you won't believe how much time I spent/wasted over the years digging out that silly include above again and again. Purity is not always a virtue.

Cheers, Ralf


Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com



More information about the Cplusplus-sig mailing list