Skip to content
forked from boostorg/pfr

std::tuple like methods for user defined types without any macro or boilerplate code

Notifications You must be signed in to change notification settings

artisdom/magic_get

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

126 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

C++14 Motivating Example

// 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}

C++17 Motivating Example

#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; // C++17 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

C++14 limitations:

  • T must be constexpr aggregate initializable and must not contain references nor bitfields

C++17 limitations:

  • T must be aggregate initializable and must not contain arrays (but may contain std::array like classes)

License

Distributed under the Boost Software License, Version 1.0.

About

std::tuple like methods for user defined types without any macro or boilerplate code

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 97.8%
  • Python 2.2%