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 เวอร์ชัน 1.0