1[section boost/python/implicit.hpp] 2[section Introduction] 3`implicitly_convertible` allows Boost.Python to implicitly take advantage of a C++ implicit or explicit conversion when matching Python objects to C++ argument types. 4[endsect] 5[section Function template `implicit_convertible`] 6`` 7template <class Source, class Target> 8void implicitly_convertible(); 9`` 10[table 11[[Parameter][Description]] 12[[Source][The source type of the implicit conversion]] 13[[Target][The target type of the implicit conversion]] 14] 15[variablelist 16[[Requires][The declaration `Target t(s);`, where s is of type Source, is valid.]] 17[[Effects][registers an rvalue `from_python` converter to Target which can succeed for any `PyObject* p` iff there exists any registered converter which can produce Source rvalues]] 18[[Rationale][C++ users expect to be able to take advantage of the same sort of interoperability in Python as they do in C++.]] 19] 20[endsect] 21[section Example] 22In C++: 23`` 24#include <boost/python/class.hpp> 25#include <boost/python/implicit.hpp> 26#include <boost/python/module.hpp> 27 28using namespace boost::python; 29 30struct X 31{ 32 X(int x) : v(x) {} 33 operator int() const { return v; } 34 int v; 35}; 36 37int x_value(X const& x) 38{ 39 return x.v; 40} 41 42X make_x(int n) { return X(n); } 43 44BOOST_PYTHON_MODULE(implicit_ext) 45{ 46 def("x_value", x_value); 47 def("make_x", make_x); 48 49 class_<X>("X", 50 init<int>()) 51 ; 52 53 implicitly_convertible<X,int>(); 54 implicitly_convertible<int,X>(); 55} 56`` 57In Python: 58`` 59>>> from implicit_ext import * 60>>> x_value(X(42)) 6142 62>>> x_value(42) 6342 64>>> x = make_x(X(42)) 65>>> x_value(x) 6642 67`` 68[endsect] 69[endsect] 70