panda ID:pandaxcl
79165次访问,排名1150(1)好友0人,关注者2
pandaxcl的文章
原创 61 篇
翻译 0 篇
转载 0 篇
评论 151 篇
pandaxcl的公告

博客文档资源下载在本人的网站下载!!!

我也优先在我的网站论坛上面回答问题

在研究C++自动化编程好久之后,发现C++自动化编程在国内还是一个空白。所谓的C++自动化编程,简单点说就是采用了C++的高级模板技术配合产生式编程技法实现了C++代码的自我配置,自动维护代码之间的种种一致性问题。关于这个问题的讨论,将会在我的网站上面进行细致的讨论。如果有问题,欢迎来我的网站提问哦。看看下面的我的网站的链接。

EMail:pandaxcl@163.com

QQ:56637059

我的网站: http://www.autodev.net

最近评论
huxi043715:博主,在很强阿。你的文章也很容易懂。
wangwei200508:呵呵,谢了
您的这里指到自己硬盘了
<a href="file:///D:/work/lex_yacc/chapter01/lexyacc.rar.png" target="_top">这里</a>
imath:老大我引用了你的 这系列文章,嘿嘿
dlr0987:abc* = ab (c+|e) =ab|abc|abcc.....

pandaxcl:这里要注意那个return i
前置和后置都是为了实现增一的效果;)
特意实现前置和后置都是相同的功能的;)
文章分类
收藏
    相册
    友情连接
    小熊猫
    我的另外一个博客
    我的网站-自动化编程社区
    我的论坛-自动化编程社区论坛
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 自动化C++程序设计---基础篇_分析C++重载函数(3)--存在的问题收藏

    新一篇: 配合STL算法编写类的成员函数 | 旧一篇: 自动化C++程序设计---基础篇_分析C++重载函数(2)--分析函数参数的种类

    书名: 《自动化C++程序设计》
    作者: 熊春雷
    网站: http://www.autodev.net
    Blog: http://blog.csdn.net/pandaxcl
    EMail: pandaxcl@163.com
    昵称: pandaxcl,开心
    QQ: 56637059
    MSN: pandaxcl@163.com
    版本: 0.01 于2007/09/25
    目标: 所有C++爱好者
    版权: 本文的版权归熊春雷所有
    代码库: autocxx(在论坛下载

    Warning

    1. 本文由熊春雷所写,绝对保证原创,在此特别严肃声明。本人简介:熊春 雷,男,1980年出生于湖北钟祥;七岁随父迁往宜昌开始学生生涯,小学和初中在 湖北宜昌樟村坪镇职工子弟学校就读;1996年考上宜昌县高中,开始三年的高中生 活;1999-2003就读于湖北大学物理系;2003-2006就读于武汉大学物理系。现就职 于盛大网络:)

    2. 绝对不能容忍他人说本文为他所写以及其他的侵权行为。一旦发现,一定 尽本人最大的能力以法律的形式严追到底,决不妥协。

    3. 引用本文,要保证本文的完整性,不可以删除此处的声明,并且务必注明出处。

    Tip

    1. 本文编写的所有代码可以用于任何用途(包括商业用途)。

    2. 用于商业用途的需要在最后发布的软件中声明借鉴了本文的思想。具体事 宜可以协商解决,(代码决不收取任何费用)。

    3. 其他事项可以和我联系,包括技术讨论等等:)或者直接登陆网站论坛: http://www.autodev.net

    Note

    1. 本文受到了《C++设计新思维》和《产生式编程》两本书的影响,同时也查阅了大 量的资料,从Loki库和Boost库中也吸收了不少营养,特此感谢之。

    2. 本文由于处于原创阶段,难免会出现各种各样的错误。代码出现错误的可能性非常 小(本来想说为零的),因为文档和代码是严格同步的,这是由VST文本的include 所保证的,代码都是测试成功之后才发布的。

    3. 本文所编写的代码,经过了VC2005编译器和g++编译器的测试,并且都通过了。

    4. 本文还没有彻底完成,算是一个初级版本,未来还将继续完善。暂时发布出来是为 了预知读者群有多少,读者越多,我的成就感越强,写作的时候也会更有动力:)

    5. 本文还会继续完善,欢迎各位读者的批评指正,也接受各种各样的建议,在权衡之 后以决定是否加入本书。

    6. 本书还没有最终完成,还会不断的进行完善,更新之后的内容将会发表于我的 网站我的博客。所以还需要读者多多关心本文的进展:)

    Contents

    存在的问题

    但是从上面的代码还可以看出,应用any的过程中还是有比较大的限制。例如当多个重载函 数的第一个参数类型相同的时候,虽然后续的参数类型不同,是合法的C++重载函数,但是 any就不知道该转型为那一个,从而产生了编译错误:)例如:

     struct A  {      kind<9> on(...);      kind<1> on(n<1>,n<2>,n<4>);      kind<1> on(n<1>,n<2>,n<6>);  };  

    在遍历这里的函数的时候,就会出现编译期错误。当n<1>,n<2>固定,第三个参数为any的 时候,也就是

     A().on(n<1>(),n<2>(),any());  

    不知道应该调用A的重载函数on中的哪一个,从而产生了编译期错误!

    即使产生了编译期错误,也证明这样的参数序列在重载函数中仍然存在!

    解决这个问题的办法有三个:

    1. 采用类似于C++中的char,short,int,long,float之间的类型提升能力,编写出一个 可以进行选择性转型的新的any类型

    2. 利用精确转型比标准转换的优先级高的特性,提供一个参数类型为any的函数声明

    3. 遵守这里的限制

    4. 原始的暴力方法:循环遍历所有的参数和类型,计算量很容易膨胀。

    通过我的一段时间的思考,第一种比较有难度。到目前为止,我还没有想出在C++中如何实 现这种能力;第四种似乎比较容易,但是计算量随着类型的增加膨胀的非常厉害,暂时不 考虑;那么可以实现的方案就只剩下第二种和第三种。

    第二种只需要专门提供一个额外函数声明就可以避免,不利的一方面就是这个额外的函数 除了这里的避免编译错误之外没有任何其他的作用,白白的多了一个空函数:( 例如:

     struct A  {      kind<9> on(...);      kind<1> on(n<1>,n<2>,n<4>);//1      kind<1> on(n<1>,n<2>,n<6>);//2      kind<1> on(n<1>,n<2>,any);// 3,any是用来避免1和2调用模糊的编译错误的!  };  

    从上面的实例中可以看出,添加了函数3之后,就可以避免本节最先出现的那个调用模糊的 编译错误了,从而可以顺利的实现函数参数种类的分析了;)

    第三种只需要额外的给已知的参数类型加一个外包装类就可以轻易的实现:

     template<class Type,int>struct a  {      a()// 必须提供默认的构造函数,用来声明临时变量      {      }      a(Type v)// 这个类型必须可以从Type类型转型          :_v(v)// 必须还要同时拥有传递参数值的能力      {      }      operator Type()// 这个类型必须可以转型回去成为Type类型      {          return _v;// 传递参数值      }      Type _v;// 转型回去的类型还需要能够传递参数值  };  

    这里的模版类a除了给定的被包装参数类型之外,还有一个整数,这个整数就是用来将相同 的类型区别成为不同的类型的包装类。使用实例:

     struct A  {      kind<9> on(...);      kind<1> on(n<1>,n<2>,a<n<4>,0>);//1      kind<1> on(n<1>,n<2>,a<n<6>,1>);//2  };  

    从上面的实例中可以看出,用模板a包装了函数1和函数2中的参数n<4>和n<6>之后,同样可 以避免函数调用模糊的错误。和添加一个额外函数的方法一样,这种方案也存在弊端:所 有存在函数调用模糊错误的函数的模糊参数(n<4>和n<6>就是模糊参数)都需要用模板a进 行包装,这样在调用函数的过程中,参数的传递都会经过模板类a的对象中转一次,这是运 行时的代价!这一点和前面添加一个精确函数(参数完全符合的函数,前面的函数3)不同 ,前面的精确函数仅仅只是编译期的代价,运行时不会有任何的代价:)

    Note

    • 这里再一次的看出了: 得到一定好处的同时必须付出一定的代价 !不过不算太

    • 高:)

    有了这一节的这两种解决方案之后,就可以采用前面介绍的分析函数参数的种类方法,不 加修改的应用到所有的重载函数上,具体的应用仅仅在函数声明的数量或函数的参数包装 上有点不同,其他的完全一样:)

    发表于 @ 2007年10月23日 21:58:00|评论(loading...)|编辑

    新一篇: 配合STL算法编写类的成员函数 | 旧一篇: 自动化C++程序设计---基础篇_分析C++重载函数(2)--分析函数参数的种类

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © pandaxcl