日志分类:原创

C++中不可继承的类

2009-08-24,星期一 | 分类:C/C++, 原创, 编程语言 | 标签:, | 164 views
如何让C++中的类变得不可继承呢?最笨的办法就是人为约定喽~呵呵~再仔细想一想可能会想到如下用法: class A { private: A(){} public: static A * Create(); }; 这有点像singleton的使用方法,但是这种模式用在不可继承的类上面就显得有点不伦不类了。我甚至还见有人用template来实现这个,真是鸡肋鸡肋。。。下面介绍两种方法,个人觉得还是比较漂亮的~(以下代码就懒的讲解了,大家自己看吧) class COrphanTag { protected: COrphanTag(){} }; class COnly : private virtual COrphanTag { public: COnly(){} }; class CMore : public COnly { public: CMore(){} }; int main(void) { COnly only; return 0; } 但是这个程序在VC6下是可以正常编译通过的,哎,没办法,必须顺着微软来啊,那我们再改改: class COnly; class ...

CUnit使用简介

2009-06-13,星期六 | 分类:CUnit, 原创 | 标签:, | 733 views
一、介绍 继Junit CppUnit的成功后, c语言环境下也出现了开发源码的白盒测试用例CUnit。CUnit以静态库的形式提供给用户使用,用户编写程序的时候直接链接此静态库就可以了。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。 二、结构框架 在CUnit的主页上可以看到对他结构的简单描述                    Test Registry                         |          ------------------------------          |                            |       Suite '1'      . . . .       Suite 'N'          |                            | ...

单件(Singleton)模式的实现

2009-06-01,星期一 | 分类:C/C++, 原创, 设计模式 | 标签:, , | 240 views
熟悉设计模式的朋友一定知道著名的Singleton吧,如果不知道的话那就先去拜读一下GoF的大作吧,我在这里就不详细介绍了。 直接给大家共享出我们的实现方法,使用的是C++的template。   // singleton.h #ifndef _SINGLETON_H_ #define _SINGLETON_H_ template class Singleton { protected: Singleton() {} Singleton( const Singleton & ) {} Singleton &operator = (Singleton &) {} ...

[原创]ecshop 分析(4) 添加自己的模板

2009-04-22,星期三 | 分类:Web开发, ecshop, 原创 | 标签:, , | 755 views
上次我们主要讨论了关于模板的问题,最后我们留下了一个问题——cache的问题。我觉得这个问题到目前位置先不要讨论好,再往后一点我们再来分析这个问题。到现在我们知道了模板的一些操作了,但是我们还是很郁闷,因为我们只是在ecshop的前台框架的控制之下。那么我们如何能够脱离出来呢?如果我们能做到自己添加属于自己或者可以放自己想要放的东西的模板,那么应该算是到了一个更高的台阶来看ecshop了。 要做到添加一个模板就必须做到前台可以显示这个模板,后台可以编辑这个模板。下面我们一步一步教大家怎么添加一个属于自己的模板。在添加之前我们先稍微分析一下,对以一个模板,在前台一定有一个php文件和它对应(很显然这个php文件就是实现给这个模板文件传送数据的)。并且在后台可以编辑这个模板对于的模块,也就是在模板管理——设置模板中有你加的模板的选项。下面我们来添加一个home模板。首先在根目录下新建home.dwt和home.php。然后将index.dwt和index.php中的内容分别拷贝到home.dwt和home.php中。对于这个模板的内容完全由你自己决定,你的内容就会决定你要怎么修改home.dwt和home.php。当然这个模板的内容是受限制的,首先要home这个模板的候选的库文件是存在的。这个是什么意思呢?这句话的意思就是对于每个模板文件,可以调用的库文件是固定的,并且这些可以调用的库文件在文件admin/includes/lib_templete.php中定义的。首先要在后台将home这个模板放入到可设置内容的模板中,部分代码如下:

[原创]ecshop分析(3)浅谈Adobe模板

2009-03-25,星期三 | 分类:ecshop, 原创 | 标签:, , , | 843 views
大家好,今天我们来解决上次遗留下的问题。上次我们谈到了如何从php脚本中往dwt模板中传参数,同时我们留下了两个问题,第一是dwt中有的地方是不可以编辑的;第二是往dwt中传参数并且让它显示,它不一定显示出来。 首先我们来讨论一下第一个问题——为什么有的地方不可以编辑。我们通过讨论index.dwt来分析一下这个问题的原因。在index.dwt中我们会看到好多形如 <!-- TemplateBeginEditable name="左边区域" --> <!-- TemplateEndEditable --> 这样的语句。如果对ecshop的后台的管理有点了解的朋友们对“左边区域”这几个字应该很熟悉吧!不错,在后台的模板管理->设置模板中你会看到如下的图片 从表面上看,大家都应该知道,比如“商品分类树”是在整个页面的中间区域显示。那么为什么在后台这边重新选择一下并且确定,在页面显示就会按照你的选择来显示呢了?它的实质是这样的,上面每个模块是对应一个库文件(就是theme下library下的lbi文件),当你把上面的这些按照你的布局设置好后点击确定,程序就会按照你的布局的选择将每个lbi文件的内容写入到index.dwt中,那么lbi文件中的内容往哪里写呢,这个时候上面的 <!-- TemplateBeginEditable name="左边区域" --> <!-- TemplateEndEditable -->

[原创]ecshop分析(2) — php和dwt文件之间的参数传递

2009-03-24,星期二 | 分类:ecshop, 原创 | 标签:, , , | 1,161 views
在上一篇中给大家带来了ecshop的总体的框架。从总体上看ecshop,相信大家的思路应该很清楚。作为一个对开源项目修改者你来说,能对ecshop有个初步的了解就行了,下面我会给大家带来我在修改ecshop的过程中的一些体会。 记得在上一篇中我们聊到了Adobe的模板。下面我们来根据ecshop跟大家讨论一下模板。说到模板,这就是ecshop前台显示的主要文件,如果你能很好理解theme下模板文件和样式表文件,对于ecshop前台显示应该没有任何问题了。Ecshop中页面到底是怎么显示的呢?这个问题我们先放在一边,我们先研究一下ecshop是怎么将一系列从数据库中读取出来,然后传到显示页面中的。要解决这个问题我们要用根目录下的index.php和theme/default下的index.dwt来作为用例。之所以用对应的两个文件夹,是因为在index.dwt中要显示的数据是通过smarty从index.php中加载进来的。在index.php中有如下代码: $position = assign_ur_here(); $smarty->assign('page_title', $position['title']); // 页面标题 $smarty->assign('ur_here', $position['ur_here']); // 当前位置 首先它是调用函数assign_ur_here,这样得到了变量$position,在变量$position中有title和ur_here这两个变量。在index.dwt中会有如下代码:

[原创]ecshop分析(1)

2009-03-22,星期天 | 分类:ecshop, 原创 | 标签:, , , , , | 864 views
Ecshop包括的文件夹有admin、api、cert、data、images、includes、js、languages、plugins、temp、theme、wap、widget这些文件夹,和根目录下的所有.php文件。这些文件和文件夹组成了整个ecshop。如果从软件工程角度分析ecshop的话,ecshop的二级可以看成admin和前台两个部分。admin主要是面向服务端的,而前台是面向客户端的,这是这两个部分的最明显的差别。下面给出ecshop的二级流程图: 此二级流程图给出了admin模块、前台显示模块和数据库模块之间的一个关系。从上面的图示可以看出,admin模块要对数据库进行读和写,这里的读和写组成了整个的后台的管理,包括商品的增加和删减、留言的管理、订单的处理等等。前台模块也要对数据库进行读和写,它的读写主要是完成交易的过程,写的内容基本都是和商品数量、点击数量这些在商品交易中一定要改变的数字。在admin模块也可以对前台显示部分进行写,这个写的过程主要是完成前台显示方式的改变,比如admin模块可以选择模板;同样也可以改变每个小模块在某个页面中是否显示,以及显示的位置(如果显示)。

VxWorks - 多任务消息机制

2009-03-11,星期三 | 分类:VxWorks, 原创 | 标签:, , | 163 views
以下是VxWorks中用消息机制实现的一个多任务通信的简单样例: /* VxWorks includes */ #include "vxWorks.h" #include "taskLib.h" #include "stdio.h" #include "msgQLib.h" int g_lTaskATid; int g_lTaskBTid; MSG_Q_ID g_MsgQ1id; MSG_Q_ID g_MsgQ2id; static void MultiTaskTestTaskA(void) { char cMsgToTaskB[100]; char cMsgFromTaskB[100]; sprintf(cMsgToTaskB,"To TaskB \n"); fprintf(stderr, " Hello from MultiTaskTestTaskA \n"); while(1) { ...

用SVNADMIN 创建一个新的源

2009-02-23,星期一 | 分类:原创 | 标签: | 149 views
D:\svn>svnadmin create eg D:\svn>cd eg D:\svn\eg>cd conf D:\svn\eg\conf>dir 驱动器 D 中的卷是 App 卷的序列号是 2493-1BBC D:\svn\eg\conf 的目录 2009/02/23  19:49    <DIR>          . 2009/02/23  19:49    <DIR>          .. 2009/02/23  19:49             1,112 authz 2009/02/23  19:49               317 passwd 2009/02/23  19:49             2,326 svnserve.conf                3 个文件          3,755 字节                2 个目录  9,120,317,440 可用字节 D:\svn\eg\conf>notepad svnserve.conf D:\svn\eg\conf>notepad authz D:\svn\eg\conf>notepad passwd D:\svn\eg\conf>   其中 svnserve.conf 要修改两处地方:如下 ### Uncomment the line below ...
Pages: 1 2 3 4 Next