摘要:我们有些时候需要存储一些函数以备后用,最常用的就是C中的Callback。。。但是到了C++年代,函数都放到了类中,想要Callback就有些复杂了。Boost::function封装了一个模版库,它可以接受静态函数,普通函数以及仿函数,为了了解它的原理,我自己试图写一个简单的类。。。我们先看boost中function的使用boost::function<int(int)> func...
阅读全文
随笔分类 - C++
关于vc++的一些心得,教训,经验。
摘要:C可以支持可变参数,所有才会有printf一类的神奇函数。问题是它是怎么实现的?其实看完了va_list/va_start等宏的定义后,才会猛然知道,原来它是这么的简单。其实就是C把所有变量压入一个堆栈,在函数中再按前面的format的指示从堆栈中取出对应的值而已。相关网页:http://ipe.gzu.edu.cn/kszx/jsj/jyjl1/200910/33758.html 上述网页中提到的一个问题是关于可变参数的传递问题,其实它并没有解决。(不可能把printf的所有解析过程重写一遍)这个问题其实非常常见,比如我们的Log想支持可变参数的时候,就很有可能需要传递可变参数Log(con
阅读全文
摘要:SFINAE(匹配失败不是错误) 当模版函数匹配失败时,如果还有其他选择,就选择其他的重载函数,并且忽略这个编译错误。相关的有boost::enable_if相关网页:http://www.cnblogs.com/coolzgx/archive/2009/12/16/1625425.html
阅读全文
摘要:1 使用:一直以来习惯了使用printf函数,但是对于可变参数没有深入研究过,觉得可变参数是一个神奇的技术^0^。。。工作闲下来的时候,想研究研究看可变参数的使用和原理。目前C提供的可变参数的申明为void function(const char *format, ...);这样就可以在function中使用可变参数C提供了几个宏用于使用可变参数va_listva_startva_argva_en...
阅读全文
摘要:在Java中,继承类可以使用super访问基类中的数据变量Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--classA{inti=-1;}classBextendsA{voidprintSuperI(){System.out.println(super...
阅读全文
摘要:以前使用bind1st以及bind2nd很少,后来发现这两个函数还挺好玩的,于是关心上了。在C++ Primer对于bind函数的描述如下:“绑定器binder通过把二元函数对象的一个实参绑定到一个特殊的值上将其转换成一元函数对象C++标准库提供了两种预定义的binder 适配器bind1st 和bind2nd 正如你所预料的bind1st 把值绑定到二元函数对象的第一个实参上bind...
阅读全文
摘要:七:regex_replace学习写了个去除左侧无效字符(空格,回车,TAB)的正则表达式。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--std::stringtestString="\r\nHelloWorld!GoodByeWorld\r\n";...
阅读全文
摘要:六:关于重复的贪婪我们先来一个例子:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--std::stringregstr="(.*)(age)(.*)(\\d{2})";boost::regexexpression(regstr);std::string...
阅读全文
摘要:五:regex_search学习regex_search与regex_match基本相同,只不过regex_search不要求全部匹配,即部份匹配(查找)即可。简单例子:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--std::stringregstr...
阅读全文
摘要:四:regex_match例子代码学习1 我们经常会看一个字符串是不是合法的IP地址,合法的IP地址需要符合以下这个特征: xxx.xxx.xxx.xxx 其中xxx是不超过255的整数正则表达式找到上面的这种形式的字符串相当容易,只是判断xxx是否超过255就比较困难了(因为正则表达式是处理的文本,而非数字)OK,我们先来处理一个数字,即:xxx。找到一种表达式来处理这个数字,并且保证这个数字不...
阅读全文
摘要:一:编译boost的正则表达式需要编译(如果不需要全部Boost的功能的话,请不要build all boost,那会花掉好几个小时。我推荐仅仅build需要的库就好。)原有的boost 1.33似乎使用vc8编译的时候有问题。下载boost 1.34.1,使用“Visual Studio 2005 Command Prompt”,进入到boost_1_34_1\libs\regex\build:...
阅读全文
摘要:摘要: boost::algorithm提供了很多字符串算法,包括: 大小写转换; 去除无效字符; 谓词; 查找; 删除/替换; 切割; 连接; 我们用写例子的方式来了解boost::algorithm能够为我们做些什么。 阅读全文 shootingstars 2007-07-26 14:12 发表评论
阅读全文
摘要:1 InputIterator 可以被用来读取容器中的元素但是不保证支持向容器的写入操作InputIterator 必须提供下列最小支持提供其他支持的iterator 也可被用作InputIterator 只要它们满足这个最小要求集两个iterator 的相等和不相等测试通过operator ++ 的前置和后置实例向前递增iterator 指向下一个元素通过解引用操作符operator * 读取一...
阅读全文
摘要:find Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->template ForwardIteratorfind( ForwardIterator first, ForwardIterator last, Type value ) find返回一个迭...
阅读全文
摘要:C++的容器中一般都提供erase函数,此函数接收的参数一般有一个是一个迭代器:如果删除某一个值的话,我们可能一般都用过: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->list c;// todo insert itemsfor (list::it...
阅读全文
摘要:class mytestclass { public: const static int i = 5; }; int main() { std::cout<<mytestclass::i<<std::endl; return 0; } 结果没有问题,输出为5(编译器为vc7.1) 但是在下面这个例子中: int regi() { return 5; } class...
阅读全文
摘要:这是我前不久遇到的一个问题,使用Windows的API函数RasEnumConnections检测RAS连接时,每个操作系统版本都必须提供不一样的RASCONN结构体,而我这个程序又必须能够运行在任何的Windows版本下,所以试着写了一个类模板。。。。(初学新手,有什么问题望各位大侠指正) /**//*文件:RasDetectT.h*功能:检测、断开RAS连接*作者:sho...
阅读全文
摘要:下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?线程函数: DWORD WINAPI ThreadProc( while(!bTerminate) { // 从一个链表中读取信息并且插入到CListCtrl中 // CListCtrl的句柄是通过线程参数传递进来的 for(;;) { ReadIn...
阅读全文