2
0
mirror of https://github.com/boostorg/pfr.git synced 2026-01-19 04:22:13 +00:00

Updated the motivating example

This commit is contained in:
Antony Polukhin
2016-09-29 22:35:22 +03:00
parent a144d044df
commit 7c252b4ca5
3 changed files with 29 additions and 7 deletions

View File

@@ -11,35 +11,40 @@ This C++14 library is meant for accessing structure elements by index and provid
### Motivating example
```c++
#include <iostream>
#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<my_struct>::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<my_struct>::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

View File

@@ -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 ]
;

View File

@@ -0,0 +1,16 @@
#include <iostream>
#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<my_struct>::value
<< " fields: " << s << "\n";
}