小编Kos*_*tya的帖子

boost :: bind的返回类型是什么?

我想将函数的"binder"保存到变量中,通过利用其运算符重载工具在下面的代码中重复使用它.这是实际做我想要的代码:

#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>

class X 
{       
    int n; 
public: 
    X(int i):n(i){}
    int GetN(){return n;}  
};

int main()
{
    using namespace std;
    using namespace boost;

    X arr[] = {X(13),X(-13),X(42),X(13),X(-42)};
    vector<X> vec(arr,arr+sizeof(arr)/sizeof(X));

    _bi::bind_t<int, _mfi::mf0<int, X>, _bi::list1<arg<1> > > bindGetN = bind(&X::GetN,_1);

    cout << "With  n =13 : " 
         << count_if(vec.begin(),vec.end(),bindGetN == 13)
         << "\nWith |n|=13 : " 
         << count_if(vec.begin(),vec.end(),bindGetN == 13 || bindGetN == -13)
         << "\nWith |n|=42 : " 
         << count_if(vec.begin(),vec.end(),bindGetN == 42 || bindGetN …
Run Code Online (Sandbox Code Playgroud)

c++ types boost-bind

25
推荐指数
1
解决办法
8791
查看次数

提升精神:"语义行为是邪恶的"?

阅读和观看此演示文稿:http: //boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/
我发现了这个陈述 - 基本上我们建议不要使用语义动作.

我必须承认,我已经感受到了类似的东西:具有语义行为的语法实际上看起来有点难看.而且,当我需要扩展/改变它们时,它完全采用语义动作进行了大量的"微观管理".在演示文稿中演示的具有属性语法的方法似乎更加优雅和有前途.

所以我想问:这是一个"官方"观点吗?我应该学习如何使用属性语法并更详细地避免语义动作吗?如果是这样 - 我想=要求一些基本的(甚至是微不足道的)例子,展示这样的方法 - LISP解释器太复杂了我不能咀嚼......

c++ boost-spirit boost-spirit-qi

21
推荐指数
1
解决办法
4726
查看次数

从LLVM获取“最小” SSA

LLVM的opt -S -mem2reg过程产生了所谓的“修剪” SSA,即删除了所有无效phi函数的形式。我想将这些phi指令保留在IR中,以获得“最小” SSA,但是我没有找到简单的方法来做到这一点。

我注定要从头开始实施整个SSA构建算法,还是有一种方法可以使用现有工具来实现?

llvm ssa llvm-ir

5
推荐指数
1
解决办法
337
查看次数

使用 Boost::Spirit (V2.4) 解析到容器中

我刚刚开始深入研究 Boost::Spirit,目前最新版本——V2.4。我的问题的本质如下:

我想解析像“1a2”或“3b4”这样的字符串。所以我使用的规则是:

  (double_ >> lit('b') >> double_)
| (double_ >> lit('a') >> double_);
Run Code Online (Sandbox Code Playgroud)

规则的属性必须是“vector <double>”。我正在将其读入容器中。

完整代码:

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>

int main(int argc, char * argv[])
{
    using namespace std;
    using namespace boost::spirit;
    using namespace boost::spirit::qi;
    using boost::phoenix::arg_names::arg1;

    char const * first = "1a2";
    char const * last  = first + std::strlen(first);
    vector<double> h;

    rule<char const *, vector<double>()> or_test;
    or_test %=    (double_ >> lit('b') >> …
Run Code Online (Sandbox Code Playgroud)

stl boost-spirit

2
推荐指数
1
解决办法
451
查看次数

标签 统计

boost-spirit ×2

c++ ×2

boost-bind ×1

boost-spirit-qi ×1

llvm ×1

llvm-ir ×1

ssa ×1

stl ×1

types ×1