2
0
mirror of https://github.com/boostorg/pfr.git synced 2026-01-19 04:22:13 +00:00
Chris Beck 3aba48c9a9 use cast_to_layout_compatible again for enums in core14_loophole
this partially reverts a subtle change to static_cast in
551b36a536

the reason that is wrong is that the static_cast produces a new value,
while we need to produce a reference to the underlying type of the enum
essentially.
2017-09-28 07:13:55 -07:00
2017-09-17 10:15:44 +03:00
2017-09-16 20:46:38 +03:00
2016-12-26 22:09:43 +03:00

Precise and Flat Reflection (ex Magic Get, ex PODs Flat Reflection)

This C++14 library is meant for accessing structure elements by index and providing other std::tuple like methods for user defined types.

Latest documentation

Pre Boost version

Test results

Branches Build Tests coverage More info
Develop: Build Status Coverage Status
Master: Build Status Coverage Status

Motivating Example #1

// requires: C++14
#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::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}

Motivating Example #2

// requires: C++14
#include <iostream>
#include "boost/pfr.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}

Requirements and Limitations

General:

  • C++14 compatible compiler (GCC-5.0+, Clang, ...)
  • Static variables are ignored
  • T must be constexpr aggregate initializable and must not contain references nor bitfields

License

Distributed under the Boost Software License, Version 1.0.

Description
Mirrored via gitea-mirror
Readme 2.3 MiB
Languages
C++ 98.3%
Python 1.1%
CMake 0.3%
Shell 0.2%