pfr
2.2.0
Ini adalah perpustakaan C ++ 14 untuk refleksi yang sangat mendasar yang memberi Anda akses ke elemen struktur berdasarkan indeks dan menyediakan metode seperti std::tuple lainnya untuk jenis yang ditentukan pengguna tanpa kode makro atau boilerplate.
Boost.pfr adalah bagian dari pustaka Boost C ++. Namun, Boost.pfr adalah perpustakaan header saja yang tidak bergantung pada Boost. Anda hanya dapat menyalin konten folder "Sertakan" dari GitHub ke dalam proyek Anda, dan perpustakaan akan berfungsi dengan baik.
Untuk versi perpustakaan tanpa boost:: namespace lihat PFR.
| Cabang | Membangun | Cakupan tes | Info lebih lanjut |
|---|---|---|---|
| Mengembangkan: | ![]() | Detail ... | |
| Menguasai: | ![]() | Detail ... |
Dokumentasi pengembang terbaru
# include < iostream >
# include < fstream >
# include < string >
# include " boost/pfr.hpp "
struct some_person {
std::string name;
unsigned birth_year;
};
int main ( int argc, const char * argv[]) {
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!
if (argc > 1 ) {
std::ofstream ofs (argv[ 1 ]);
ofs << boost::pfr::io (val); // File now contains: {"Edgar Allan Poe", 1809}
}
}Output:
Edgar Allan Poe was born in 1809
Jalankan sampel di atas
# include < iostream >
# include " boost/pfr.hpp "
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 " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << boost::pfr::io (s) << " n " ;
}
Output:
my_struct has 3 fields: {100, H, 3.14159}
# include < iostream >
# include " boost/pfr.hpp "
struct my_struct { // no ostream operator defined!
std::string s;
int i;
};
int main () {
my_struct s{{ " Das ist fantastisch! " }, 100 };
std::cout << " my_struct has " << boost::pfr::tuple_size<my_struct>::value
<< " fields: " << boost::pfr::io (s) << " n " ;
}
Output:
my_struct has 2 fields: {"Das ist fantastisch!", 100}
# include < iostream >
# include < string >
# include < boost/config/warning_disable.hpp >
# include < boost/spirit/home/x3.hpp >
# include < boost/fusion/include/adapt_boost_pfr.hpp >
# include " boost/pfr/io.hpp "
namespace x3 = boost::spirit::x3;
struct ast_employee { // No BOOST_FUSION_ADAPT_STRUCT defined
int age;
std::string forename;
std::string surname;
double salary;
};
auto const quoted_string = x3::lexeme[ ' " ' >> +(x3::ascii::char_ - ' " ' ) >> ' " ' ];
x3::rule< class employee , ast_employee> const employee = " employee " ;
auto const employee_def =
x3::lit ( " employee " )
>> '{ '
>> x3::int_ >> ' , '
>> quoted_string >> ' , '
>> quoted_string >> ' , '
>> x3::double_
>> ' } '
;
BOOST_SPIRIT_DEFINE(employee);
int main() {
std::string str = R"(employee{34, "Chip", "Douglas", 2500.00})";
ast_employee emp;
x3::phrase_parse(str.begin(),
str.end(),
employee,
x3::ascii::space,
emp);
std::cout << boost::pfr::io(emp) << std::endl;
}
Output:
(34 Chip Douglas 2500)
Lihat Docs.
Didistribusikan di bawah lisensi perangkat lunak Boost, versi 1.0.