mirror of
https://github.com/boostorg/python.git
synced 2026-01-19 16:32:16 +00:00
* Made Cygwin archiving reliable, even when the user supplies a path with backslashes ---------------------------------------------------------------------- Modified Files: tools/build/gcc-tools.jam tools/build/new/boost-build.jam boost/python/detail/config.hpp libs/python/build/Jamfile libs/python/example/do_it_yourself_convts.cpp libs/python/example/dvect.cpp libs/python/example/example1.cpp libs/python/example/getting_started1.cpp libs/python/example/getting_started2.cpp libs/python/example/ivect.cpp libs/python/example/nested.cpp libs/python/example/noncopyable_export.cpp libs/python/example/noncopyable_import.cpp libs/python/example/pickle1.cpp libs/python/example/pickle2.cpp libs/python/example/pickle3.cpp libs/python/example/richcmp1.cpp libs/python/example/richcmp2.cpp libs/python/example/richcmp3.cpp libs/python/example/rwgk1.cpp libs/python/example/simple_vector.cpp libs/python/test/comprehensive.cpp Added Files: libs/python/example/rwgk2.cpp libs/python/example/rwgk3.cpp ---------------------------------------------------------------------- [SVN r11705]
58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
// Example by Ralf W. Grosse-Kunstleve
|
|
|
|
/*
|
|
This example shows how to make an Extension Class "pickleable".
|
|
|
|
The world class below can be fully restored by passing the
|
|
appropriate argument to the constructor. Therefore it is sufficient
|
|
to define the pickle interface method __getinitargs__.
|
|
|
|
For more information refer to boost/libs/python/doc/pickle.html.
|
|
*/
|
|
|
|
#include <string>
|
|
|
|
#include <boost/python/class_builder.hpp>
|
|
namespace python = boost::python;
|
|
|
|
namespace { // Avoid cluttering the global namespace.
|
|
|
|
// A friendly class.
|
|
class world
|
|
{
|
|
private:
|
|
std::string country;
|
|
int secret_number;
|
|
public:
|
|
world(const std::string& country) : secret_number(0) {
|
|
this->country = country;
|
|
}
|
|
std::string greet() const { return "Hello from " + country + "!"; }
|
|
std::string get_country() const { return country; }
|
|
};
|
|
|
|
// Support for pickle.
|
|
python::ref world_getinitargs(const world& w) {
|
|
python::tuple result(1);
|
|
result.set_item(0, w.get_country());
|
|
return result.reference();
|
|
}
|
|
}
|
|
|
|
BOOST_PYTHON_MODULE_INIT(pickle1)
|
|
{
|
|
// Create an object representing this extension module.
|
|
python::module_builder this_module("pickle1");
|
|
|
|
// Create the Python type object for our extension class.
|
|
python::class_builder<world> world_class(this_module, "world");
|
|
|
|
// Add the __init__ function.
|
|
world_class.def(python::constructor<std::string>());
|
|
// Add a regular member function.
|
|
world_class.def(&world::greet, "greet");
|
|
|
|
// Support for pickle.
|
|
world_class.def(world_getinitargs, "__getinitargs__");
|
|
}
|