Lambda 学习笔记 杂感

 
今天看了boost中的Lambda,第一映像是丑陋,看了几个例子发现还有点意思,一些实现使用它比起以前的用标准库中的东东来做看起来顺眼的多。完全可以代替functional中那些std::plus之流。不过继续看下去看到Lambda表达式中的控制结构,又觉得很丑陋起来。比起以前的托管C++有得一拼,虽然不习惯C++/CLI的语法,但看起来也比它好多了。当然感觉都是很主观的东西,或许我觉得丑陋单其它人会觉得其美无比。但我想感觉不自然的人会占多数,缺乏语言级的支持支持,使用类库来实现Lambda,写出来的程序可读性真是极差。从个人来说,自己还是希望C++语言中提供Lambda,这样方便很多,再结合C++的标准库,这样使用起来灵活得多,自然得多。
看一段代码,下面是Lambda中if, then, else 语句的样子
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"
#include "boost/lambda/if.hpp"
int main()
{
 using namespace boost::lambda;
 using namespace std;
 vector<int> vec;
 vec.push_back(1);
 vec.push_back(3);
 vec.push_back(6);
 vec.push_back(5);
 vec.push_back(4);
 
 for_each(vec.begin(),vec.end(),if_then_else(
    _1 <= 4,
    cout << _1 << '/n',
    cout << constant("var=")<<_1<<"/n"));
 
 cout<<"/n";
 
   for_each(vec.begin(),vec.end(),
    if_(_1 <= 4) [
      cout << _1 << "/n"
    ]
    .else_[
      cout << constant("var=")<<_1<<"/n"
    ] );
}
最近正在跟风学习Ruby中 : ),正好那里面也有类似的叫做block的东西,它得到了语言级的支持,下面的代码实现同样的功能
vec = [ 1 , 3 , 6 , 5 , 4 ]
vec. each do |element|
  if element <= 4
 puts element
  else
 puts "var=" + element.to_s
  end
end
显然要自然得多,当然在语境上有点不同,数组的 each实现可能是这样(摘自《Programming Ruby》)
# within class Array...
def each
for each element
valid Ruby
yield(element)
end
end
自己上面写的do…end那一块代码替换上面的yield调用
希望有一天C++中也可以很自然的用if,else,while,static_cast等关键字来写Lambda表达式,不用像托管C++那样引进一些让人别扭的其它关键字
不过不敢抱太大的希望,标准委员会不肯轻易把某样当作语言特性加入 C++,总是说要用C++的人从事的工作是方方面面的,不能因此影响的其他不需要这种特性的人,我们可以以库的形式来代替。这不由得让我想到了木桶的最短木板原则。首先不谈很多东西用库的实现起来很不自然,如lambda表达式,很多东西更本没有相应的库。看了TR1,TR2,里面的东西少得让人失望,98到现在八年了,标准库仍然这么单薄。我需要一个SQL库,可有人却会说C++不适合开发那些简单的数据库应用方面的程序,你可以用XXX语言或XXX语言,本来用C++可以很好的完成工作,由于缺乏某些支持,一大批人奔其它语言去了。或者又人会说你难道自己没有代码积累,自己平时就应该积累一些这样的代码,你也可以使用XXX库,又不一定非要使用标准库。作为一个初学者,我哪去代码积累,使用其它库又可能要忍受学习一些风格相差很大的库的痛苦。
昨天在论坛又看见有人抱怨缺乏框架和类库 C++用起来很累了。虽然框架级的复用看起来很强大,但自己已经不对C++引入框架抱希望了,框架是很容易变化的,就像跨平台的GUI库一样,这样易变化又容易引入竞争的东西是不符合C++的精神的。现在只希望C++能丰富一下自己的标准库,让自己不用东拼西凑,使用各种其它库来写程序。如果一个程序又用到Qt写界面,又用到ACE写通信模块,还用到boost提供的一些小组件,写出来的代码真是风格迥异。还好我没有用MFC,而是用的Qt,否则这些代码的风格相差会更大,你或许都不会相信这是用同一门语言写的。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值