存档

2011年11月 的存档

漫话C++0x(六)—- variadic templates

2011年11月20日 3 条评论

熟悉printf/scanf的朋友应该对C/C++中的变参函数不陌生,它可以支持任意个数的参数。模板(template)在C++中的地位相信不用我再多说,但是,一直以来,C++模板不支持变参,这成了模板一个被诟病的地方,在很多使用场景限制了模板的威力。举例来说,同样语义的模板函数,因为参数个数不定,有若干个,这样的场景之下,我们只能通过枚举的方式来实现。这样的方法,一方面使得代码本身不够简洁,另一方面因为枚举只能做到有限个数的参数,还是在一定程度上限制了使用的灵活性。现在,C++0x引入了变参模板,上面讲的问题便迎刃而解了,这对C++程序员朋友们来说是莫大的福音。下面我们先看一个简单的例子,先对变参模板有一个直观的印象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include < iostream>
#include < string>
 
void Print()
{
    std::cout < < "\n";
}
 
template< typename T, typename ... TRest>
void Print(const T& obj, const TRest& ... rest)
{
    std::cout < < obj << " ";
    Print(rest ...);
}
 
int main()
{
    double p = 3.14;
    std::string s("pi");
    Print(p, &p, s, &s);
}

阅读全文…

2012

2011年11月13日 8 条评论


2011即将过去,再剩下差不多两个月的时间了。每年到了近年关,总感觉事情额外的多,有时候真的觉得有点心力交瘁,但是没有办法,还是得挺着。晚上把过年回家的机票搞定,好好整理一下心情,迎接2012来临之前的最后两个月!最近可能由于压力比较大,感觉有点小浮躁,需要好好静心反思一下,calm down and take it easy! 越来越觉得,职场确实是一所大学校,有好多东西需要我们去学习,而这些中,很多都是与技能无关的。在这个学习的过程中,有时候确实需要因为我们的无知而付出一些代价,这也许是我们成长需要经历的必要的过程,经历了,收获了,相信会越来越好的!

分类: 生活感悟 标签:

漫话C++0x(五)—- thread, mutex, condition_variable

2011年11月6日 6 条评论

熟悉C++98的朋友,应该都知道,在C++98中没有thread, mutex, condition_variable这些与concurrency相关的特性支持,如果需要写多线程相关程序,都要借助于不同平台上各自提供的api,这样带来的问题就是程序的跨平台移植性比较差,经常要用一大堆的#ifdef WIN32类似的宏来区分不同的平台,搞得程序很难看。C++0x最原始的初衷之一就是为了让C++的功能更加强大,更加方便使用。现如今硬件如此发达,concurrency在程序设计中已经是司空见惯的事情了,如果C++再不支持这些concurrency相关的特性,就真的out了。现在,C++程序员的福音到了,C++0x提供了对thread, mutex, condition_variable这些concurrency相关特性的支持,以后多线程这一块的代码可以完全跨平台了,而且由于C++0x封装的都比较好,代码写起来也十分简洁。下面开始介绍今天的内容。

  • 1. thread
  • 写过多线程程序的朋友,相信对thread本身都不会陌生,这里不对thread本身做太多的说明,以介绍C++0x中提供的thread的用法为主。请大家先看下面的例子: 阅读全文…