class id
От: alsemm Россия  
Дата: 29.06.04 09:50
Оценка:
All, что скажите про такой способ определения типа объекта в run time. Этакий куцый rtti:


class IFoo
{
public:
    virtual ~IFoo() {}
public:
    virtual int id() const = 0;

    // тут всякая интерфейсная лабуда
    ...
    virtual void a() = 0;
    virtual void b() = 0;

};

template <class T>
class UniqId : public IFoo
{
public:
    static int uniqId() { return (int)&uniqId; }   // фишка в том, что адрес uniqId уникальный для разных T
//////////////////////
// IFoo partial impl
public:
    virtual int id() const { return uniqId(); }
};


class Foo1 : public UniqId<Foo1> { /* реализация IFoo::a(), IFoo::b() */ };
class Foo2 : public UniqId<Foo2> { /* реализация IFoo::a(), IFoo::b() */ };


// использование такое:
void doSmth(IFoo *obj)
{
    obj->a();
    if(obj->id() == Foo1::uniqId())
    {
        ((Foo1*)obj)->Foo1SpecificMethod();
    }
}




Тока про плохой дизайн писать не надо, суть не в этом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.