From e26556c6317d723f1380c998bca994ec83cca0fa Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Wed, 8 May 2002 04:22:34 +0000 Subject: [PATCH] initial checkin [SVN r13739] --- doc/v2/implicit.html | 149 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 doc/v2/implicit.html diff --git a/doc/v2/implicit.html b/doc/v2/implicit.html new file mode 100644 index 00000000..99ce9ad8 --- /dev/null +++ b/doc/v2/implicit.html @@ -0,0 +1,149 @@ + + + + + + Boost.Python - <boost/python/implicit.hpp> + + + +
+

+

+ +
+

Boost.Python

+ +

Header <boost/python/implicit.hpp>

+
+
+ +

Contents

+ +
+
Introduction + + +
Functions + +
+
+
Function Template implicitly_convertible + +
+ +
Example +
+
+ +

Introduction

+ + implicitly_convertible allows Boost.Python to + implicitly take advantage of a C++ implicit or explicit conversion + when matching Python objects to C++ argument types. + +

Functions

+ +

Function template implicitly_convertible

+
+template <class Source, class Target>
+void implicitly_convertible();
+
+ + + + + + + +
+ implicitly_convertible template parameters
+
Parameter + Description + +
Source + The source type of the implicit conversion + +
Target + The target type of the implicit conversion +
+ +
+
Requires: The expression Target(s), + where s is of type Source, is valid. + +
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 + +
Rationale: C++ users expect to be able to take + advantage of the same sort of interoperability in Python as they + do in C++. +
+ + +

Example

+ + +

C++ module definition

+ +
+#include <boost/python/class.hpp>
+#include <boost/python/implicit.hpp>
+#include <boost/python/module.hpp>
+
+using namespace boost::python;
+
+struct X
+{
+    X(int x) : v(x) {}
+    operator int() { return v; }
+    int v;
+};
+
+int x_value(X const& x)
+{
+    return x.v;
+}
+
+X make_x(int n) { return X(n); }
+
+BOOST_PYTHON_MODULE_INIT(implicit_ext)
+{
+    module("implicit_ext")
+        .def("x_value", x_value)
+        .def("make_x", make_x)
+        .add(
+            class_<X>("X")
+            .def_init(args<int>())
+            )
+        ;
+    implicitly_convertible<X,int>();
+    implicitly_convertible<int,X>();
+}
+
+ +

Python code

+ +
+>>> from implicit_ext import *
+>>> x_value(X(42))
+42
+>>> x_value(42)
+42
+>>> x = make_x(X(42))
+>>> x_value(x)
+42
+
+ +

Revised + + 08 May, 2002 + + + +

© Copyright Dave + Abrahams 2002. All Rights Reserved. +