Design&Art

C++博客 首页 新随笔 联系 聚合 管理
  26 Posts :: 0 Stories :: 38 Comments :: 0 Trackbacks

#

TinyXml是一个C++的,简单小巧,支持STL,而且跨平台的XML解析器。
http://www.hansencode.cn/category/tinyxml/
posted @ 2007-09-26 16:43 安帛伟 阅读(683) | 评论 (0)编辑 收藏

一. 定义
双分派是指:接受者和参数都能在运行时决定它的类型。(从而若有同名函数的话,依参数选定目标函数)

二. 问题的提出
C++ 不支持双分派,只支持单分派。也就是说参数的类型将在编译阶段决定。(虽然遇上同名函数的选取时,没有体现多态,但进入函数后,指针参数或引用参数仍然表现了其多态)
下面的代码演示了该问题:
#include <iostream>
using namespace std;

class D;

//B
class B
{
public:
 
void virtual output(B * b){cout << "B:B" << endl;}
 
void virtual output(D * d){cout << "B:D" << endl;}
};
class D : public B
{
public:
 
void output(B * b){cout << "D:B" << endl;}
 
void output(D * d){cout << "D:D" << endl;}
};

int main()
{
    B 
* p1 = new D;
    B 
* p2 = new D;
    p1
->output(p2);
 
 
return 0;
}
以上代码的输出结果是:
D:B
如果参数能够在运行时决定类型的话,那么输出来的信息应该是D:D,因为p2的实际类型是D。但是,事实上输出来的结果是D:B。也就是说p2的类型被误解为B了!这就是问题的所在。

三. 解决方法
Visitor设计模式
posted @ 2007-09-19 16:18 安帛伟 阅读(1299) | 评论 (1)编辑 收藏

     摘要: 正则表达式是用来处理文本和匹配模式最高效、最简单的方法。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。  阅读全文
posted @ 2007-09-13 16:19 安帛伟 阅读(691) | 评论 (0)编辑 收藏

VC6.0中调试Release版本程序

 

有两种方法:

1. 在怀疑有错误的地方加MessageBox,在函数中显示可能导致错误的变量的值。或者插入写文件语句。输出可能导致错误的变量的值到一个记录文件。

 

2. 在工程中设置

”Project Settings”里选Setting For All Configurations

C/C++标签中“Debug Info”选 Program Database

link标签中“Category”选中“Debug Info”复选框和“Microsoft Format”。

现在就可以像在调试Debug中那样设置断点进行调试了。由于代码优化,有些变量观察不到,行的运行顺序也可能不同。

 

VS2005中调试Release版本的程序

 

1. 在工程的属性设置中,“链接”——>“调试”——>“生成调试信息”,选择“ ”。

2. C/C++”——>“常规”——>“调试信息形式”,选择 /ZI”。

3. C/C++”——>“优化”,设置“禁用”。

posted @ 2007-09-05 17:33 安帛伟 阅读(768) | 评论 (0)编辑 收藏

     摘要:   在现在的标准C++中,只有一种智能指针:std::auto_ptr。其原因并非是因为auto_ptr 已足以应付所有相关的工作——实际上,auto_ptr 有一个重大的缺陷,就是它不能被用在STL 容器中——而是因为现在的C++标准在制定时并未能对智能指针进行全面的考察。按照C++标准委员会成员Herb Sutter 的说法,只有一种标准的智能指针是一件“可羞”的事情:首先,智能指针所能做的许多有用的事情,是可怜的auto_ptr 不能完成的;其次,在有些情况下使用auto_ptr 可能会造成问题,上面所说的不能在容器中使用就是一例。实际上,许多程序员已经开发了各种有用的智能指针,有些甚至在auto_ptr 被定为标准之前就已存在,但问题是,它们不是标准的。在这样的情况下,C++标准委员会考虑引入新的智能指针,也就是自然而然的事情了。目前进入委员会视野的,主要有两种智能指针方案:Boost 智能指针和Loki 智能指针。前者是由C++标准委员会库工作组发起的Boost 组织开发的,而后者由世界级的C++专家Andrei Alexandrescu 开发,并在他所著的“Modern C  阅读全文
posted @ 2007-08-21 09:00 安帛伟 阅读(427) | 评论 (0)编辑 收藏

介绍:

Boost使用的编译系统叫做Boost.Jam(Bjam),是一个基于FTJam的构造工具,而FTJam又基于Perforce Jam

细节:

Jammake(1)(如果你使用UNIX就知道make(1)是什么,在这里简单说明,make(1)是指系统工具类中,名叫make的东西)的一个替代品,Jam的目标是让构造简单的东西更加容易,而让构造复杂的东西变得简单。下面是一个例子:

Main smail : main.c map.c resolve.c deliver.c
     misc.c parser.y alias.c pw.c headers.c
     scanner.l getpath.c str.c ;

Smail从一打文件进行构造.Jam自动管理依赖的头文件.

Jam非常易于移植:它能在UNIX,VMS,Mac和NT平台上.多数Jamfiles在上述平台上本身就是可移植的.

Jam is unintrusive: it is small, it has negligible CPU overhead, and it doesn't create any of its own funny files (c.f. Odin, nmake, SunOS make).

Jam can build large projects spread across many directories in one pass, without recursing, tracking the relationships among all files. Jam can do this with multiple, concurrent processes.

Jam isn't under the blinkin GNU copyright, so you can incorporate it into commercial products.

 

 

构造Boost.Jam

构造好了Bjam以后,要安装它只需要将生成的执行文件拷贝到PATH变量指定的某个路径下就可以了。各个平台都有相应平台的初始构造脚本用来构造可执行程序。这些脚本都接收一个可选参数,用来编译构造的工具集的名称。如果没有给工具集参数没有给,或做可用工具集的检测,并选用一个。构造脚本接受的参数如:

<build script name> [toolset]

无参数的运行脚本可能是最好的选择。

 

 

Boost发布的Boost.Jam的源代码在BOOST_ROOT/tools/build/jam_src.

如果脚本检测适当的工具集失败可能是因为你的工具集不能自动检测。在这些情况下,你需要在脚本参数那里指定工具集,当然这假定工具集在PATH中可以找到.注意:编译Boost.Jam的工具集和构造Boost的工具集是独立的。

posted @ 2007-08-18 00:03 安帛伟 阅读(960) | 评论 (0)编辑 收藏

VC6打开一个文件时,提示如下错误:
lines   ending   with   only   a   carriage   return   have   been   detected.   These   will   be   modified   to   include   a   line   feed.

在对该文件进行单步调试时,实际执行的代码与看到的错开了一行,很是郁闷。用Source Insight和UltraEdit对该文件进行编辑和保存,仍不能解决问题。

上网搜索了一下,发现是如下原因:
“有两种流行的ascII文件格式,一种是msdos,一种是unix。msdos的ascII文件的换行处用0x0d   0x0a两个ascII表示,但unix下用0x0a表示。VC的编译器采用msdos方式的ascII文件,所以当他遇到unix的ascII文件格式时会向你报警。”

解决方法:
在VC6里编辑一下该文件,再保存时VC6就会修复该问题。
posted @ 2007-06-06 16:45 安帛伟 阅读(2293) | 评论 (1)编辑 收藏

     摘要: Command模式的目的是为了使命令请求方与命令的执行方解耦合。
因解耦合可得到的好处是:1. 增加新的具体命令不影响其他的类;2. 可以把多个命令聚合在一起组成命令队列。
Command模式的缺点:使用命令模式会导致某些系统有过多的具体命令类。
  阅读全文
posted @ 2007-05-21 23:32 安帛伟 阅读(542) | 评论 (0)编辑 收藏

     摘要: 转贴自:http://www.scmlife.com/viewthread.php?tid=569
另外后面的命令列表中加了一些自己常用的自定义命令。
  阅读全文
posted @ 2007-05-17 15:05 安帛伟 阅读(1553) | 评论 (0)编辑 收藏

     摘要: 书上已经讲得很清楚了,这里给出一个编译通过的例子。 3mylist.h // file: 3mylist.h#include <iostream>template <typename T>class ListItem{public:    ListItem(T&n...  阅读全文
posted @ 2007-04-16 19:54 安帛伟 阅读(825) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3