关闭

通告:告别旧帐号,新帐号 ralphjzhang

我决定迁移到新的 CSDN 帐号:ralphjzhang,并尽力完善那边的 blog,新的 blog 在http://blog.csdn.net/ralphjzhang/我会勤快一点更新这个 blog,感兴趣的朋友,可以看那边。本人对由此带来的不便深表歉意。...
阅读(2080) 评论(0)

C++ Template Metaprogramming 第九章试译: Crossing the Compile-Time/Runtime Boundary (1)

(看过了这么多编译期算法之后)还记得运行时吧?我们已经在编译期的天空飞行了好久,现在是时候脚踏实地了。一个有趣的程序终究还是要在运行时干点什么的。本章就是关于怎样穿越C++编译期和运行时的边界——这一层“臭氧层”,如果你想要的话——这样我们的元程序可以真正的用户面前施展拳脚。在C++中,进行这趟旅程的办法恐怕是无穷无尽,但是其中有一些更加有用,下面讲到的就是最常用的一些技巧。9.1 for_eac...
阅读(3035) 评论(5)

脱颖而出

转眼也在跨国公司工作了两年了,工作的确是一件让人成长的事情。在学生时代对很多做人处事的道理的可以津津乐道、侃侃而谈,但是知道工作了一段时间,那些道理才真正的升华成了准则,或者......教训。刚才在读杰克·韦尔奇自传,第二章“脱颖而出”。其实学生时代也读过,但却没有什么领悟,然而刚才在厕所马桶上的阅读,却让我感触良多。杰克说,他在GE的第一年,每当上面问他的意见,他总是会给出比意料之中的要多得多的...
阅读(3461) 评论(2)

remove_all_pointer

boost 提供了 remove_pointer ,不过不够,有的时候我们需要拿掉一个“指向指针的指针……的指针”类型上面所有的“指针”前缀,所以下面这个 remove_all_pointer 就有用了,当然它还很不完善,这里先备份,慢慢修改:#include #include #include #include #include #include #include #include #inclu...
阅读(3089) 评论(0)

Debug 命令详解

Debug  启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。  Debug [[drive:][path] filename [parameters]]  参数  [drive:][path] filename  指定要测试的可执行文件的位置和名称。  parameters  指定要测试的可执行文件所需要的任何命令行信息。  ++  说明  使用 Debug 命令但不指定...
阅读(5035) 评论(1)

C++ local class 的用途:finalizer 手法

 在有异常的程序里面,函数的出口变得难以捉摸起来,这是大家都知道的了。但是很多时候,我们希望函数在退出之前能够一定完成某些事情,在 Java 里面,我们用 try...finally 来干这件事;而在 C++ 里面,我们有 RAII 这个好东西。不过有的时候,RAII 显得有些笨拙,如果我们希望一个函数无论如何在退出之前都要输出一个警告到控制台,难道还要为了它专门写一个类么?这不但让代码分散难于理...
阅读(4357) 评论(0)

boost.bind 如何 bind continue.1

我们先定义目标:1. simple_bind 提供与 bind 类似的界面,可以只考虑通过对象引用(或者值)调用成员函数的情况,而不考虑 free function 或者通过指针调用等等。具体地说,就是允许person.SetName("Ralph")     --> simple_bind(&Person::SetName, person,_1)(string("...
阅读(3485) 评论(0)

boost.bind 如何 bind

Boost.bind好用么?当然好用,而且它也确定进入下一代的 C++ 标准了,也早就进了 TR1 了。回顾一下,它允许我们干这个:#include #include #include #include #include using namespace std;using namespace boost;struct Person{ ...
阅读(4670) 评论(4)

智能指针的另外用途:optional value 手法

有些时候我们希望一个类成员除了自己的值以外,还能有一个“未被初始化”的状态,例如在一个 Server 里面,我们需要管理 user 数量:class Server{//...    int userCount_;//...};userCount_ 当然是初始化为0,但是有时候并不如此简单,很多资源可能是在第一个 user 使用的时候被分配的,而回收资源的时候,如果仅仅看到 userCount_ 为...
阅读(3365) 评论(3)

简单常识——关于 STL 算法

distance很多时候我们希望在一个 vector ,或者 list ,或者什么其他东西里面,找到一个值在哪个位置,这个时候 find 帮不上忙,而有人就转而求助手写循环了,而且是原始的手写循环:for ( int i = 0; i     if ( vect[i] == value ) break;如果编译器把 i 看作 for scope 的一部分,你还要把 i 的声明拿出去。真的需要这样么...
阅读(6785) 评论(1)

Expression Template

如果在 C++ 里面评选称得上是“魔法”的技术,Expression Template (ET,酷吧?) 当之无愧要成为其中一员。如果要求两个数组的内积,该怎么做?    int a[4] = {1,100,0,-1};    int b[4] = {2,2,2,2}; 手写循环就不说了,STL 算法是这样:    inner_product(a, a + 4, b, 0);不错,但是有个问题。S...
阅读(4029) 评论(3)

简单常识——关于string

toupper, tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), toupper);cout transform(s.begin(), s.end(), s.begin(), tolower);cout 当...
阅读(5476) 评论(3)

Traits

Traits Use of traits is anothercommon programming techniquein conjunction with template programming.  A traits class is ashadowclass that accompani...
阅读(1573) 评论(0)

Template Metaprogramming - cont.1

MPL 是一个非常聪明的作品,在发挥 C++ 模板威力这方面登峰造极,而其接口的优雅、设计的一致性和思想的完整性让 Loki 这样类似的作品也相形见绌。废话少说,我们上代码。#include #include #include #include #include #include #include #include #include #include #include #include using...
阅读(3046) 评论(0)

Template Metaprogramming

1. 何谓 Metaprogramming?Metaprogram: program that manipulates another program.Metaprogramming is not a new concept:Compiler is a metaprogram: manipulates your code and produces code in a lower level cod...
阅读(3101) 评论(0)

模板元编程 --- 用 MPL 解决实际问题

在 STL 中有各种容器,而 STL 算法允许我们对容器中的元素做各种操作,下面的程序对于每一个当代的 C++ 程序员都应该是轻而易举的:#include #include #include #include using namespace std;struct print{    void operator()(const string& _str)    {        cout     }...
阅读(4354) 评论(4)

凤凰涅磐 --- Phoenix 2 发布预览

首先,对于不熟悉 Phoenix 的读者,先介绍一下 Phoenix 是什么。Phoenix 的作者,Joel de Guzman,也就是 Boost.Spirit 的作者,在看到许多往 C++ 中引入 Functional Programming 的努力以后,决定把 Spirit 优雅的设计思想用于建立一个 C++ 的 Functional Programming 库,这就是 Phoenix 了...
阅读(3040) 评论(3)

简单常识——关于stream

从文件中读入一行简单,这样就行了:ifstream ifs("input.txt");char buf[1000];ifs.getline(buf, sizeof buf);string input(buf);当然,这样没有错,但是包含不必要的繁琐和拷贝,况且,如果一行超过1000个字符,就必须用一个循环和更麻烦的缓冲管理。下面这样岂不是更简单?string input;input.reserve...
阅读(2546) 评论(1)

unspecified_bool_type 手法

在 C++ 中,有时候我们需要一个自定义类型能够支持 if(obj) 和 if(!obj) 之类的语法,也就是说MyClass obj;if(obj){  //do something}if(!obj){  //do something}这个需要在智能指针的实现中尤其明显,因为它可以保证与原生 C++ 指针在用法上的一致性。明显的解决方法是重载 operator bool() 转换,但是这样问题太...
阅读(1793) 评论(5)

Java Double-Checked Locking 已死,C++ 呢?

已经有众多文章讨论 double-checked locking 模式在 Java 下面无法正常工作,这里先简要的总结一下。根本原因在于 Java 的 memory model 允许所谓的 out-of-order write ,对于下面的 Java 代码,out-of-order write 可能导致灾难性的结果public static Singleton getInstance(){ if...
阅读(6107) 评论(11)
43条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:106886次
    • 积分:1883
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:1篇
    • 译文:0篇
    • 评论:72条
    最新评论