pfr
2.2.0
これは、非常に基本的な反射のためのC ++ 14ライブラリであり、インデックスごとに構造要素にアクセスし、他のstd::tupleマクロまたはボイラープレートコードのないユーザー定義タイプの方法を提供します。
Boost.pfrは、Boost C ++ライブラリの一部です。ただし、boost.pfrは、ブーストに依存しないヘッダーのみのライブラリです。 GitHubから「含める」フォルダーのコンテンツをプロジェクトにコピーするだけで、ライブラリは正常に動作します。
boost:: pfrを参照してください。
| 枝 | 建てる | カバレッジをテストします | 詳細 |
|---|---|---|---|
| 開発する: | ![]() | 詳細... | |
| マスター: | ![]() | 詳細... |
最新の開発者ドキュメント
# 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}
}
}出力:
Edgar Allan Poe was born in 1809
上記のサンプルを実行します
# 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 " ;
}
出力:
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 " ;
}
出力:
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;
}
出力:
(34 Chip Douglas 2500)
ドキュメントを参照してください。
Boost Softwareライセンスバージョン1.0の下で配布されます。