• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Boost.PFR
2
3This is a C++14 library for very basic reflection that gives you access to structure elements by index and provides other `std::tuple` like methods for user defined types without any macro or boilerplate code.
4
5
6[Latest documentation](http://apolukhin.github.com/magic_get/index.html)
7
8### Test results
9
10Branches        | Build         | Tests coverage | More info
11----------------|-------------- | -------------- |-----------
12Develop:        | [![Build Status](https://travis-ci.org/apolukhin/magic_get.svg?branch=develop)](https://travis-ci.org/apolukhin/magic_get) [![Build status](https://ci.appveyor.com/api/projects/status/3tled9gd24k9paia/branch/develop?svg=true)](https://ci.appveyor.com/project/apolukhin/magic-get/branch/develop) | [![Coverage Status](https://coveralls.io/repos/github/apolukhin/magic_get/badge.png?branch=develop)](https://coveralls.io/github/apolukhin/magic_get?branch=develop) | [details...](http://www.boost.org/development/tests/develop/developer/pfr.html)
13Master:         | [![Build Status](https://travis-ci.org/apolukhin/magic_get.svg?branch=master)](https://travis-ci.org/apolukhin/magic_get) [![Build status](https://ci.appveyor.com/api/projects/status/3tled9gd24k9paia/branch/master?svg=true)](https://ci.appveyor.com/project/apolukhin/magic-get/branch/master) | [![Coverage Status](https://coveralls.io/repos/github/apolukhin/magic_get/badge.png?branch=master)](https://coveralls.io/github/apolukhin/magic_get?branch=master) | [details...](http://www.boost.org/development/tests/master/developer/pfr.html)
14
15### Motivating Example #0
16```c++
17#include <iostream>
18#include <fstream>
19#include <string>
20
21#include "boost/pfr.hpp"
22
23struct some_person {
24  std::string name;
25  unsigned birth_year;
26};
27
28int main(int argc, const char* argv[]) {
29  some_person val{"Edgar Allan Poe", 1809};
30
31  std::cout << boost::pfr::get<0>(val)                // No macro!
32      << " was born in " << boost::pfr::get<1>(val);  // Works with any aggregate initializables!
33
34  if (argc > 1) {
35    std::ofstream ofs(argv[1]);
36    ofs << boost::pfr::io(val);                       // File now contains: {"Edgar Allan Poe", 1809}
37  }
38}
39```
40Outputs:
41```
42Edgar Allan Poe was born in 1809
43```
44
45
46### Motivating Example #1
47```c++
48#include <iostream>
49#include "boost/pfr/precise.hpp"
50
51struct my_struct { // no ostream operator defined!
52    int i;
53    char c;
54    double d;
55};
56
57int main() {
58    my_struct s{100, 'H', 3.141593};
59    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
60        << " fields: " << boost::pfr::io(s) << "\n";
61}
62
63```
64
65Outputs:
66```
67my_struct has 3 fields: {100, H, 3.14159}
68```
69
70### Motivating Example #2
71
72```c++
73#include <iostream>
74#include "boost/pfr/precise.hpp"
75
76struct my_struct { // no ostream operator defined!
77    std::string s;
78    int i;
79};
80
81int main() {
82    my_struct s{{"Das ist fantastisch!"}, 100};
83    std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
84        << " fields: " << boost::pfr::io(s) << "\n";
85}
86
87```
88
89Outputs:
90```
91my_struct has 2 fields: {"Das ist fantastisch!", 100}
92```
93
94
95### Requirements and Limitations
96
97[See docs](http://apolukhin.github.com/magic_get/index.html).
98
99### License
100
101Distributed under the [Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt).
102