为什么当我使用 boost::bind 时,boost::spirit::qi 语义操作不能使用两个参数?
Why doesn't boost::spirit::qi semantic action work with two arguments when I use boost::bind?
我尝试过使用boost语义操作。在我的情况下,boost::bind
是最简单的解决方案。第一个例子运行良好;在这里,我只在语义操作中使用一个参数。
#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;
}
我已尝试扩展我的代码。在第二种情况下,我想向绑定函数传递两个参数,但编译器不会编译此代码。什么会失败?我没有找到任何例子。第二个代码在这里:
#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;
}
您无法编译此代码,因为只有一个输入参数-boost::fusion::vector<int,int>-由(int_>>",">>int_)序列形成。试试这个
#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(boost::fusion::vector < int, int > arg_)
{
std::cout << boost::fusion::at_c < 0 > (arg_) << "," << boost::fusion::at_c < 1 > (arg_) << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
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)] >> '}');
return 0;
}
相关文章:
- Boost.Asio:不能使用 std::bind() 来指定回调
- c boost.python不能将const char*转换为str
- “boost::p rogram_options”不能在“variables_map”上使用两次“store”
- Boost 1_65_1 不能使用 OpenSSL 1.1.0g "undefined reference" 编译,但可以使用 "nm"
- 不能在构造函数中使用 boost.asio 解析器
- 为什么intrusive_ptr和shared_ptr不能与 boost::侵入式容器一起使用?
- boost::range::d etail::any_iterator 不能很好地与 boost::zip_iterator 一起使用
- 为什么 boost::interprocess::managed_shared_ptr 到 non-const 不能转换
- 我可以用boost.program_options做什么和不能做什么?
- 使用boost multiprecision/mpfr float-字符串不能被解释为有效的整数错误
- 为什么我不能在窗口上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码
- boost和Curl不能一起工作
- 不能在非 Boost 版本的 Asio 中使用 asio::p laceholders::error
- 为什么这里的"boost::bind()"不能替换为"std::bind()"?
- 不能使用 Boost.process
- 如果我删除 const,为什么这个带有 boost::shared_ptr 的调用不能在 c++ 中编译
- 类不能通过 boost::p ython 包装
- 与 std::d eque 一起使用时,不能将 Boost::mutex 作为私有类成员吗?
- 不能将 boost::stream 与 std::string<unsigned char> 一起使用来实例化 boost::binary_oarchive 或 boost::binary
- 为什么我的结构不能有 boost::variant 类型的成员,但可以有 vector<boost::variant> 类型的成员?