This C++14 library is meant for accessing structure elements by index and providing other std::tuple like methods for user defined types without any macro or boilerplate code.
Branches | Build | Tests coverage | More info |
---|---|---|---|
Develop: | |||
Master: |
// requires: C++14
#include <iostream>
#include <string>
#include "boost/pfr/precise.hpp"
struct some_person {
std::string name;
unsigned birth_year;
};
int main() {
some_person val{"Edgar Allan Poe", 1809};
std::cout << boost::pfr::get<0>(val) // No macro!
<< " was born in " << boost::pfr::get<1>(val); // Works with any aggregate initializables!
}
Outputs:
Edgar Allan Poe was born in 1809
// requires: C++14
#include <iostream>
#include "boost/pfr/precise.hpp"
struct my_struct { // no ostream operator defined!
int i;
char c;
double d;
};
int main() {
using namespace boost::pfr::ops; // out-of-the-box ostream operator for all PODs!
my_struct s{100, 'H', 3.141593};
std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << s << "\n";
}
Outputs:
my_struct has 3 fields: {100, H, 3.14159}
// requires: C++14
#include <iostream>
#include "boost/pfr/precise.hpp"
struct my_struct { // no ostream operator defined!
std::string s;
int i;
};
int main() {
using namespace boost::pfr::ops; // out-of-the-box ostream operators for aggregate initializables!
my_struct s{{"Das ist fantastisch!"}, 100};
std::cout << "my_struct has " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << s << "\n";
}
Outputs:
my_struct has 2 fields: {"Das ist fantastisch!", 100}
General:
- C++14 compatible compiler (GCC-5.0+, Clang, Visual Studio 2017 with /std:c++latest or /std:c++17, ...)
- Static variables are ignored
- T must be constexpr aggregate initializable and must not contain references nor bitfields
Distributed under the Boost Software License, Version 1.0.