V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
YUCOAT
V2EX  ›  程序员

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

  •  
  •   YUCOAT · 2013-05-14 14:07:20 +08:00 · 3634 次点击
    这是一个创建于 4003 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在看C++的STL文档,我看的是这个:http://www.sgi.com/tech/stl/

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

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

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

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

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

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

    因为非const的引用是没法传递临时对象的
    YUCOAT
        3
    YUCOAT  
    OP
       2013-05-14 14:35:53 +08:00
    @chenha0 Good Job....
    Golevka
        4
    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
        5
    kshatriya  
       2013-05-14 17:02:46 +08:00
    STL是用模板实现的...
    kshatriya
        6
    kshatriya  
       2013-05-14 17:03:26 +08:00
    大神啊...用模板...
    66450146
        7
    66450146  
       2013-05-14 17:13:10 +08:00
    Functor 都应该用传值的,因为它们一开始就不应该携带任何需要运行期才能确定的值,所以编译器最后可以把这个参数优化掉,不会占用额外的时间和空间

    所以说标准委员会这帮人都是变态。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5381 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:01 · PVG 14:01 · LAX 23:01 · JFK 02:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.