Posts Tagged ‘boost’

用boost的方式在预编译期检查编译器和平台以及其它

用boost的方式在预编译期检查编译器和平台以及其它

一般C/C++程序员都知道用一些编译器预编译宏来判断编译器的种类的操作系统。

一般有:
_WIN32 ,不管windows x86 还是 x86_64 都会有_WIN32,注意前面的下划线,如果没有下划线,MSDN的官方定义有这个酷酷的下划线.
__unix__ 是否 unix OS
__linux__ 是否是 linux
__apple__ 是否是平台

原来咧,BOOST库提供了一个相当丰富的库来做这件事:
这个BOOST库是 Predef http://www.boost.org/doc/libs/1_55_0/libs/predef/doc/html/index.html

#include <boost/predef.h>

看看官方文档的目录:
Table of Contents

Introduction
Using the predefs
Adding new predefs
Reference
BOOST_ARCH architecture macros
BOOST_COMP compiler macros
BOOST_LANG language standards macros
BOOST_LIB library macros
BOOST_OS operating system macros
Other macros
Version definition macros
Acknoledgements

包括处理器架构,编译器相关宏,语言相关宏,库相关宏,操作系统相关宏~~~

I like boost ~~~

copyright blog.ykyi.net

Be the first to comment - What do you think?  Posted by zausiu - June 11, 2014 at 15:38

Categories: Tech Articles   Tags:

用Range Adaptor,废弃replace_copy_if之类的函数

看看replace_copy_if的一个简单的例子:

std::vector<int> vec;

boost::push_back(rng, std::back_inserter(vec), pred);

对于这种写法,如果使用Range Adaptor的话,则可以写成:

std::vector<int> vec;

boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value));

第二种写法有什么好处呢,

1. 更高效率。因为std::back_inserter有额外的内存分配开销。

2. 更灵活。因为第二种写法可以应用更多的适配器,比如: boost::push_back(vec, rng | boost::adaptors::replaced_if(pred, new_value) | boost::adaptors::reversed);

3. 更安全。因为第二种写法没有用unbounded output iterator。

Be the first to comment - What do you think?  Posted by zausiu - April 15, 2014 at 20:22

Categories: Uncategorized   Tags: ,

boost::io_service的poll_one和run_one有什么区别

boost::io_service的poll_one会立即返回(non-blocking),不管有没有已经被触发的处理函数(ready handler)。

而run_one有可能阻塞。如果还没有被触发的处理函数,run_one会阻塞到有一个handler被调用为止。

更多资料: http://think-async.com/

呃。这篇日志也太短了!!!

BOOST库真是个好东西啊~~好多写法很有现代脚本语言的taste。~~而且,那么丰富的库让生产效率大大提高了。

 

copyright blog.ykyi.net

Be the first to comment - What do you think?  Posted by zausiu - March 18, 2014 at 19:03

Categories: Tech Articles   Tags: ,

Next Page »