From 7c252b4ca5137c895755c94c541af0f5c0cd5cfe Mon Sep 17 00:00:00 2001 From: Antony Polukhin Date: Thu, 29 Sep 2016 22:35:22 +0300 Subject: [PATCH] Updated the motivating example --- README.md | 19 ++++++++++++------- test/Jamfile.v2 | 1 + test/motivating_example.cpp | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 test/motivating_example.cpp diff --git a/README.md b/README.md index a7cbbd9..78f1e98 100644 --- a/README.md +++ b/README.md @@ -11,35 +11,40 @@ This C++14 library is meant for accessing structure elements by index and provid ### Motivating example ```c++ #include -#include "magic_get.hpp" +#include "boost/pfr.hpp" -struct my_struct { +struct my_struct { // no ostream operator defined! int i; char c; double d; }; int main() { - my_struct s{100, 'H', 3.141593 }; - std::cout << "my_struct has " << flat_tuple_size::value << " fields: " - << "{ " << flat_get<0>(s) << ", " << flat_get<1>(s)<< ", " << flat_get<2>(s) << " }\n"; + using namespace boost::pfr::flat_ops; // for ostream operator out-of-the-box for all PODs! + + my_struct s{100, 'H', 3.141593}; + std::cout << "my_struct has " << boost::pfr::flat_tuple_size::value + << " fields: " << s << "\n"; } + ``` Outputs: ``` -my_struct has 3 fields: { 100, H, 3.14159 } +my_struct has 3 fields: {100, H, 3.14159} ``` ### Requirements and Limitations * C++14 compatible compiler (GCC-5.0+, Clang, ...) +* Static variables are ignored + +C++14 limitations (C++17 fixes those): * T must be POD and must not contain references nor bitfields * T must not contain pointers to user defined types * Enums will be returned as their underlying type -* Static variables are ignored ### License diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 16598f1..c76a8c4 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -21,6 +21,7 @@ test-suite pfr [ compile-fail non_aggregate1.cpp ] [ compile-fail non_aggregate2.cpp ] [ compile-fail bitfields.cpp ] + [ run motivating_example.cpp ] [ run ../example/examples.cpp ] ; diff --git a/test/motivating_example.cpp b/test/motivating_example.cpp new file mode 100644 index 0000000..54e8066 --- /dev/null +++ b/test/motivating_example.cpp @@ -0,0 +1,16 @@ +#include +#include "boost/pfr.hpp" + +struct my_struct { // no ostream operator defined! + int i; + char c; + double d; +}; + +int main() { + using namespace boost::pfr::flat_ops; // ostream operator out-of-the-box for all PODs! + + my_struct s{100, 'H', 3.141593}; + std::cout << "my_struct has " << boost::pfr::flat_tuple_size::value + << " fields: " << s << "\n"; +}