如何使用Boost(Lambda?)使std :: sort()更容易?

Meh*_*dad 3 c++ boost boost-lambda c++03

让我说我有

struct Value { int foo(); };
size_t *begin = ...,
       *end   = ...;
Run Code Online (Sandbox Code Playgroud)

如果我想Value在C++ 03中对一堆索引进行排序,我必须写一些像这样乏味的东西:

struct Comparator
{
    Value *data;
    Comparator(Value *data) : data(data) { }
    bool operator()(size_t a, size_t b)
    { return data[a].foo() < data[b].foo(); }
};
sort(begin, end, Comparator(data));
Run Code Online (Sandbox Code Playgroud)

有没有办法用Boost(可能是Boost.Lambda)更整齐地写出这个,最好是一行?

Nic*_*las 6

没有.

Boost.Lambda在处理重载运算符时效果最佳.一旦你将一个命名函数调用带入事物中,Boost.Lambda在使代码更简洁和易于阅读方面变得不那么有用了.你必须开始使用功能绑定器和其他类似的东西.

事实上,你使用lambda参数作为索引(而不是被索引的值)可能会使用Boost.Lambda库中的operator [].

可以使Boost.Lambda等效于此.但它不会是我称之为"整洁"的东西,而"1行"将是非常长的.

这就是为什么C++ 11将lambdas引入语言而不是将Boost.Lambda合并到标准库中的原因.

哦,不要忘记:Boost.Lambda通常被认为是过时的.请改用Boost.Phoenix.当然,它不会比Lambda更能帮助你.