actions.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 84 行

CPP
84
字号
/*=============================================================================    Copyright (c) 2001-2008 Hartmut Kaiser    Copyright (c) 2001-2008 Joel de Guzman    Distributed under the Boost Software License, Version 1.0. (See accompanying    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#include <boost/config/warning_disable.hpp>#include <boost/spirit/include/karma.hpp>#include <boost/lambda/lambda.hpp>#include <boost/bind.hpp>#include <iostream>#include <sstream>// Presented are various ways to attach semantic actions//  * Using plain function pointer//  * Using simple function object//  * Using boost.bind//  * Using boost.lambdausing namespace boost::spirit;void read(int& i){    i = 42;}struct read_action{    void operator()(int& i, unused_type, unused_type) const    {        i = 42;    }};///////////////////////////////////////////////////////////////////////////////int main(){    { // example using plain functions        std::string generated;        bool result = karma::generate(std::back_inserter(generated),             '{' << int_[&read] << '}');        if (result)            std::cout << "Simple function: " << generated << std::endl;    }    { // example using simple function objects        std::string generated;        bool result = karma::generate(std::back_inserter(generated),             '{' << int_[read_action()] << '}');        if (result)            std::cout << "Simple function object: " << generated << std::endl;    }    { // example using boost.bind        std::string generated;        bool result = karma::generate(std::back_inserter(generated),             '{' << int_[boost::bind(&read, _1)] << '}');        if (result)            std::cout << "Boost.Bind: " << generated << std::endl;    }    { // example using boost.lambda        namespace lambda = boost::lambda;        std::string generated;        std::stringstream strm("42");        bool result = karma::generate(std::back_inserter(generated),            '{' << int_[strm >> lambda::_1] << '}');        if (result)            std::cout << "Boost.Lambda: " << generated << std::endl;    }    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?