BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #33016同步于 2009/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

关于类结构转换的一个问题

DarkIce
2009/3/18镜像同步11 回复
有一个类,结构和函数都相同,但是函数有不用的实现,通过编译时候的宏定义来区分 2个版本分别在主程序和动态链接库中使用 现在在主程序中将该类的成员放入list中,传递到动态链接库中,在动态链接库中取的时候就会中断 想知道这个可能是什么原因引起的,有没有办法解决
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wks机器人#1 · 2009/3/18
不明白,看看代码? 何苦用宏呢?bjarne叔叔说,每个宏的出现都表示语言本身有缺憾
DarkIce机器人#2 · 2009/3/18
设计上来说确实有点问题,但是现在也没找到更好的方法 不同的地方需要用到不同的实现方法,但是大部分代码又是相同的,又不想把代码分开,所以就多建了几个项目文件来实现不同的编译策略 主要现在项目文件太多了,牵扯的地方就太多比较麻烦 这个代码太多了 简单点说 class AAA { //若干函数和结构,结构是一样的,函数实现略有差别 } 主程序里面 AAA item; list<AAA> list.insert(item); 链接库里面 list<AAA>::iterator iter=list.begin(); list.begin()能执行成功,但是赋值给迭代子就出错了 【 在 wks (cloverprince) 的大作中提到: 】 : 不明白,看看代码? : 何苦用宏呢?bjarne叔叔说,每个宏的出现都表示语言本身有缺憾
flyingkisser机器人#3 · 2009/3/18
bjarne叔叔的程序肯定没有遭破解过 【 在 wks (cloverprince) 的大作中提到: 】 : 不明白,看看代码? : 何苦用宏呢?bjarne叔叔说,每个宏的出现都表示语言本身有缺憾
AFX机器人#4 · 2009/3/18
想知道如何个中断法,异常?赋值不对? 还是其它
flyingmiao机器人#5 · 2009/3/18
【 在 DarkIce 的大作中提到: 】 : 设计上来说确实有点问题,但是现在也没找到更好的方法 : 不同的地方需要用到不同的实现方法,但是大部分代码又是相同的,又不想把代码分开,所以就多建了几个项目文件来实现不同的编译策略 : 主要现在项目文件太多了,牵扯的地方就太多比较麻烦 : ................... 那为什么不通过继承和多态的方法来复用? 也遇到这种情况,比较恼火。
flyingmiao机器人#6 · 2009/3/18
这两个类是怎么用的? 通过宏区分两个类,类名又一致,最后会出来两份同名的二进制代码吧,链接的时候不会有二义性么?
DarkIce机器人#7 · 2009/3/18
生成中间文件的时候通过不同的项目让他们生成在不同的目录下面 最后的动态链接库名字也不一样 多加几个项目文件,改几个项目文件还是比大段大段的改代码简单的多 【 在 flyingmiao (amiao) 的大作中提到: 】 : 这两个类是怎么用的? : 通过宏区分两个类,类名又一致,最后会出来两份同名的二进制代码吧,链接的时候不会有二义性么?
DarkIce机器人#8 · 2009/3/18
关键是不想改类的名字,不然牵扯的地方实在太多了 这个问题后来把所有中间文件全部清理了以后再编译运行似乎通过了 windows vs2005下的 linux下的编译还没试过,不知道能不能通过,希望可以吧 【 在 flyingmiao (amiao) 的大作中提到: 】 : 那为什么不通过继承和多态的方法来复用? : 也遇到这种情况,比较恼火。
Konoka机器人#9 · 2009/3/18
我说一下之前遇到过的一个问题吧 之前做一个功能,是在eclipse的环境下提供的,涉及到一些文件、工程信息等资源。 eclipse把文件等资源都是用自己提供的接口封装好了,另外还涉及到一些eclipse本身提供的版本管理等功能,所以在实现的时候就直接用eclipse提供的IFile来获取相关文件的信息。 后来由于另外一个需求,需要把这个功能放到非eclipse环境下运行。问题就出来了,非eclipse环境下,只能用JDK的File,但仅仅通过File是得不到我需要的所有信息,因为IFile这个接口还可以提供关于工程等很多信息。 考虑到两个不同的环境下,主要的功能代码都是一样的,只有涉及文件资源的地方不一样。另外非eclipse环境下要额外传些别的参数进去,以弥补JDK的File本身信息不足,也就是说参数也不一样。 我是这样处理的,抽出一个IResourceManager的接口,定义了所有与资源相关的方法,比如说给出一个文件的路径和一个输出流,然后要求把流中的东西全部写到文件中。然后eclipse环境下提供eclipse方面的实现,而非eclipse环境下使用JDK来实现。运行的时候,调用者把不同的IResourceManager实现传进来就行了。这样就没必要说在原来的类里面把各种环境都顾虑到,而且还能提供一定的扩展性,比如说如果以后还想增加一种别的环境下的实现,只要再提供一个IResourceManager实现就好了。 希望这个对你有帮助