pfr
2.2.0
Esta es una biblioteca C ++ 14 para una reflexión muy básica que le brinda acceso a los elementos de estructura por índice y proporciona otros métodos de std::tuple para el usuario sin ningún código de macro o calderera.
BOOST.PFR es parte de las bibliotecas Boost C ++. Sin embargo, BOOST.PFR es una biblioteca de solo encabezado que no depende de Boost. Puede copiar el contenido de la carpeta "Incluir" desde el GitHub en su proyecto, y la biblioteca funcionará bien.
Para una versión de la biblioteca sin boost:: Namespace, ver PFR.
| Sucursales | Construir | Cobertura de prueba | Más información |
|---|---|---|---|
| Desarrollar: | ![]() | detalles... | |
| Maestro: | ![]() | detalles... |
Última documentación del desarrollador
# 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}
}
}Salidas:
Edgar Allan Poe was born in 1809
Ejecute la muestra anterior
# 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 " ;
}
Salidas:
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 " ;
}
Salidas:
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;
}
Salidas:
(34 Chip Douglas 2500)
Ver documentos.
Distribuido bajo la licencia de software Boost, versión 1.0.