把这个简单的C语言程序改成C++版

2013-05-14 14:07:20 +08:00
 YUCOAT
最近在看C++的STL文档,我看的是这个:http://www.sgi.com/tech/stl/

但是我发现里面好多C++程序的例子语法有点令我费解,于是我也想尝试着照着这些例子写一写简单的程序,结果程序出问题了。

就拿下面的这个简单的C程序来作为例子:
https://gist.github.com/thlgood/5574018

我想尝试着写一个C++版的,结果编译不通过:

https://gist.github.com/thlgood/5574022

请问这个C++版的该怎么写?
3725 次点击
所在节点    程序员
7 条回复
YUCOAT
2013-05-14 14:17:09 +08:00
怎么贴代码啊?
我照着这个页面贴代码,还是没成功啊http://www.v2ex.com/t/1244
chenha0
2013-05-14 14:31:28 +08:00
把函数原型改成void func(T& x, T1 f)就好,这类functor一般都很小,直接传值的开销可以接受。

或者不改这个原型,额外声明一个
hello<int> f;
然后
func(10, f);

因为非const的引用是没法传递临时对象的
YUCOAT
2013-05-14 14:35:53 +08:00
@chenha0 Good Job....
Golevka
2013-05-14 16:58:26 +08:00
#include <iostream>

template <typename val_type, typename func_type>
void apply(val_type val, const func_type &func) {
func(val);
}

int main(int argc, char *argv[]) {
apply(10, [](int x) {std::cout << "apply " << x << " to lambda\n";});
return 0;
}
kshatriya
2013-05-14 17:02:46 +08:00
STL是用模板实现的...
kshatriya
2013-05-14 17:03:26 +08:00
大神啊...用模板...
66450146
2013-05-14 17:13:10 +08:00
Functor 都应该用传值的,因为它们一开始就不应该携带任何需要运行期才能确定的值,所以编译器最后可以把这个参数优化掉,不会占用额外的时间和空间

所以说标准委员会这帮人都是变态。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/68783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX