首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

烦请诸位看下这个抽象有没有更好的实现

2013-09-14 
烦请各位看下这个抽象有没有更好的实现?需求是这样的,需要定义一个抽象的PeerId,PeerId的具体实现不确定,

烦请各位看下这个抽象有没有更好的实现?

需求是这样的,需要定义一个抽象的PeerId,PeerId的具体实现不确定,从上层来看,PeerId只要能够实现比较就OK了,因此,抽象PeerId的定义如下:


struct PeerId
{
    virtual bool operator==(const PeerId& p) = 0;
};


这样,上层实现就可以不用关心具体的实现,这没问题。
不过有个比较棘手的问题,具体的PeerId需要使用dynamic_cast:


class XXXPeerId : public PeerId
{
public:
    XXXPeerId(int i) : a(i) {}
    bool operator==(const PeerId& p)
    {
        try
        {
            const XXXPeerId& xp = dynamic_cast<const XXXPeerId&>(p);
            return a == p.a;
        }
        catch (...)
        {
            return false;
        }
    }

private:
    int a;
};


从代码实现看,这显然不是一个好的设计,各位看下有没有更好的设计方案,谢谢!



class 设计
[解决办法]
声明成这样不行吗?
bool operator==(const XXXPeerId& p)
[解决办法]
1、如果p不是XXXPeerId的相关类,何从比较?
2、dynamic_cast放的地方不对啊,这个应该放到外面。c++本质上是没有rtti的。
3、如果你想把不同的事物进行比对,只能在PeerId上进行。同时弄个虚函数get_id。
4、异常处理是不能乱用的,这不是java,就算是java能不用catch就尽量不用。这个开销太大了。

热点排行