2
私はブーストセマンティックアクションを使用しようとしました。私の場合、boost::bind
が最も簡単な解決策でした。最初の例はうまくいきます。ここで私はセマンティックアクションで1つの引数だけを使用しています。ブースト::バインドを使用するとboost :: spirit :: qiセマンティックアクションが2つの引数で動作しないのはなぜですか?
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/bind.hpp>
#include <iostream>
namespace qi = boost::spirit::qi;
// A plain function
void print(int const& i)
{
std::cout << i << std::endl;
}
int main()
{
using boost::spirit::qi::int_;
using boost::spirit::qi::parse;
char const *first = "{44}", *last = first + std::strlen(first);
parse(first, last, '{' >> int_[boost::bind(&print, _1)] >> '}');
return 0;
}
私のコードを拡張しようとしました。後者の場合、バインドされた関数に2つの引数を渡したいが、コンパイラはこのコードをコンパイルしない。何が失敗するのですか?私は例を見いださなかった。 第二のコードはここにある:一つだけの入力パラメータがありますので
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/bind.hpp>
#include <iostream>
namespace qi = boost::spirit::qi;
// A plain function
void print(int const& i1, int const& i2)
{
std::cout << i1 << "," << i2 << std::endl;
}
int main()
{
using boost::spirit::qi::int_;
using boost::spirit::qi::parse;
char const *first = "{44,55}", *last = first + std::strlen(first);
parse(first, last, '{' >> (int_ >> "," >> int_)[boost::bind(&print, _1,_2)] >> '}');
return 0;
}