2010年8月19日

GNU flex unistd.h在VC下的编译问题

摘要: 问题现象:...: fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory 原因,flex生成的代码如下:#ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first 阅读全文

posted @ 2010-08-19 21:28 NBSTAR 阅读(881) 评论(0) 推荐(0) 编辑

2010年8月9日

如何让qmake生成的Makefie不链接Qt库

摘要: 在CSDN上搜索了一下,大部分关于qmake的实例都是链接到Qt库,包括QtCore和QtGui。如果只是想写一个普通的C++命令行程序,链接Qt库显然是使得最终生成的程序尺寸变得臃肿,而且必须要安装庞大的Qt包。那么如何让qmake不链接到Qt库呢? 默认情况下,qmake是要链接QtCore和QtGui两个库的。即使你什么也不做,因为这是默认行为。通过以下配置可以解除这种配置。#不需要QT CONFIG -= qt 简单吧,这下清净了,我们明确告知qmake这不是qt程序,只需要qmake为我们生成普通Makefile,其他什么也不要多做。以下是我为boost asio中一个简单tcp服务 阅读全文

posted @ 2010-08-09 23:53 NBSTAR 阅读(475) 评论(0) 推荐(0) 编辑

2010年8月5日

以boost factory & boost function实现对象工厂设计模式

摘要: 工厂对象模式简介在GoF的《设计模式》一书中,对Factory Method/Object Method 意图描述如下:定义一个用于创建对象的接口,让子类决定实例化是哪一个类。 Factory Metho是一个类的实例化延迟到其子类。其结构图如下: 其中, 类 Product 定义了一类对象的接口。 ConcreteProduct 实现 Product 的接口。 Creator是工厂方法的包装器。ConcreteCreator 类实现Creator的接口。基于以上结构,每个ConcreteProduct必须带有一个 ConcreteCreator, 用来产生特定的ConcreteProduc. 阅读全文

posted @ 2010-08-05 21:42 NBSTAR 阅读(995) 评论(0) 推荐(0) 编辑

2010年8月3日

Boost.Asio和ACE之间关于Socket编程的比较

摘要: ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。 ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。 最近分析ASIO的源代码,让我无不惊呀于它设计。在ACE中开发中的内存管理一直让人头痛,ASIO的出现,让我看到新的曙光,成为我新的好伙伴。简单地与ACE做个比较。 boost::asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组件的方式来提供应用接口。但是对于常见的情况,采用一个好 阅读全文

posted @ 2010-08-03 23:28 NBSTAR 阅读(182) 评论(0) 推荐(0) 编辑

2010年7月29日

从C++类成员函数作为回调函数说起

摘要: 在网络消息处理中经常要用到回调机制。例如处理异步网络操作的前摄器设计模式(Proactor),(可以参考 《C++ 网络编程 卷2》中关于ACE Proactor模式实现 )。异步的 Web 服务器将这样来利用前摄器模式:首先让 Web 服务器向 OS 发出异步操作,并将回调方法登记到 Completion Dispatcher(完成分派器),后者将在操作完成时通知 Web 服务器。于是 OS 代表 Web 服务器执行操作,并随即在一个周知的地方将结果排队。Completion Dispatcher 负责使完成通知出队,并执行适当的、含有应用特有的 Web 服务器代码的回调。 使用前摄器模式的 阅读全文

posted @ 2010-07-29 00:20 NBSTAR 阅读(625) 评论(0) 推荐(0) 编辑

2010年7月28日

C++工厂模式实现与改进小结

摘要: TODO: 阅读全文

posted @ 2010-07-28 23:24 NBSTAR 阅读(122) 评论(0) 推荐(0) 编辑

为什么C++成员函数不能作为C-Style回调函数?

摘要: 1.为什么C++成员函数不能作为C-Style回调函数?在C语言中,通过注册函数指针的方式,来实现函数回调。如下是一个的例子。//回调函数指针typedef int (*functionPointer_t)(int*); int myFunc1(int *arg){ *arg = 100; return 0;}void CallerFunc(functionPointer_t fp){ int arg = 0; fp(&arg); //这里通过函数指针调用被调函数}int main(){ CallerFunc(myMemberFunc1); return 0... 阅读全文

posted @ 2010-07-28 22:36 NBSTAR 阅读(229) 评论(0) 推荐(0) 编辑

2010年7月19日

词法分析生成器 之 lexertl 【4】添加文件解析行号功能

摘要: 目标: 将文件名和行号信息存在Token中以便词法分析和语法分析时输出更详细的信息。这在调试你的分析器时将会有非常大帮助。做法: 记得之前 Boost.Spirit 有一个 file_iterator类和position_iterator类,仔细看了一下,确实满足 lexertl match_results类 对迭代器的要求。 好,那就写几行代码验证一下吧。#include "lexertl/generator.hpp"#include "lexertl/lookup.hpp"#include "lexertl/rules.hpp"# 阅读全文

posted @ 2010-07-19 00:46 NBSTAR 阅读(565) 评论(0) 推荐(0) 编辑

2010年7月17日

词法分析生成器 之 Lexertl 【3】配合bison工作

摘要: Technorati 标签: boost lexerTechnorati 标签: lexertl,bison,lexer analyser,grammer analyser众所周知,bison是C/C++领域最著名的开源语法生成器之一。并且一直保持着活跃的开发状态。当前发表的最新稳定版本为2.4.2(2010-03-20)。在本节我们将lexertl和bison结合在一起,生成一个简单的分析器。 其中 lexertl 负责生成词法分析器,而 bison 负责生成语法分析器。本示例的语法描述文件取自Bison自带的生成C++代码例子,说明文档在 http://www.gnu.org/softwa 阅读全文

posted @ 2010-07-17 00:30 NBSTAR 阅读(225) 评论(0) 推荐(0) 编辑

2010年7月16日

windows 下 bison 命令行调用

摘要: 目标:将bison集成到Visual studio中做法:以cygwin下bison为例。1.新建一个批处理文件 bison.bat,内如如下:@set bison_dir="E:/SDK/cygwin/bin" @set Path=Path;%bison_dir% @REM bison command line @REM Usage @REM bison.bat %grammer_file_name @REM @REM bison parameters used in our command line @REM -l don't generate `#line&# 阅读全文

posted @ 2010-07-16 19:47 NBSTAR 阅读(333) 评论(0) 推荐(0) 编辑

导航