Estoy usando Boost :: Spirit para analizar texto en las estructuras. Esto requiere el uso de BOOST_FUSION_ADAPT_STRUCT para analizar el texto y almacenarlo directamente en la estructura. Sé que la macro toma 2 argumentos: el nombre de la estructura como el 1er arg y todos los miembros de la estructura como el segundo argumento. Y yo estoy pasando sólo a los 2. Pero consigo un error de compilación diciendoBOOST_FUSION_ADAPT_STRUCT no toma el número correcto de argumentos
error: macro "BOOST_FUSION_ADAPT_STRUCT_FILLER_0" passed 3 arguments, but takes just 2
Aquí es el fragmento de código. Avíseme si necesita el código completo.
Gracias.
namespace client
{
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
struct Dir_Entry_Pair
{
std::string dir;
std::string value1;
std::pair<std::string, std::string> keyw_value2;
};
}
BOOST_FUSION_ADAPT_STRUCT(
client::Dir_Entry_Pair,
(std::string, dir)
(std::string, value1)
(std::pair< std::string, std::string >, keyw_value2))
Ésta es la regla que estoy tratando de analizar,
qi::rule<Iterator, Dir_Entry_Pair()> ppair = dir
>> '/'
>> entry
>> -(keyword >> entry);
Gracias! Acabo de tipear el std :: par <..> y funcionó :) – Nik
@Nik: es un problema común con las macros: generalmente aparece 'BOOST_FOREACH' sobre' map' que es ligeramente más común que la combinación Fusion/Spirit :) ¡Espero que te diviertas con ellos! –