Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > проверка наследования


Автор: retto 2.3.2010, 13:30
искал искал и так током ничего не нашел.
вобщем есть некий интерфейс. от него наследуется n-е количество классов. как мне проверить наследуется ли класс от моего интерфейса?
что-то на подобии InheritsFrom в TComponent?

Автор: borisbn 2.3.2010, 13:44
Код

MyClass * p = dynamic_cast< MyClass * >( interfacePointer );
if (p )
{
 // MyClass наследуется от interfacePointer
}
else
{
 // MyClass не наследуется от interfacePointer
}

Автор: retto 2.3.2010, 13:47
borisbn, эх, думал есть чето поприкольней. но всеравно большое спасибо smile

в данном случае ругается на dynamic_cast< MyClass * >
ошибка:
[C++ Error]: E2108 Improper use of typedef 'MyClass'

Автор: SenkraD 2.3.2010, 14:24
retto,  вот те продвиннутый вариант
Код
//--------------------------------------------------------------------------------------------------
#include <iostream>
#include <iomanip>

//--------------------------------------------------------------------------------------------------
namespace Mpl
{
    

    template<class Base, class Derived>
    struct IsDerived
    {
    private:
        struct YesType { char a[1]; };
        struct NoType  { char a[10]; };

        static YesType    deduce(Base*);
        static NoType   deduce(...);        

    public:
        enum
        {
            value = (sizeof(deduce(static_cast<Derived*>(NULL))) == sizeof(YesType))
        };
    };
}

template<class B, class D>
bool isDerived(D const&)
{
    return (Mpl::IsDerived<B, D>::value != 0)? true : false;
}


struct A {};
struct B {};
struct C : A {};

//--------------------------------------------------------------------------------------------------
//
//
int main(int argc, char const* const argv[])
{
    B b;
    C c;

    std::cout << std::boolalpha;
    std::cout << isDerived<A>(b) << std::endl;
    std::cout << isDerived<A>(c) << std::endl;
    return 0;
}
//--------------------------------------------------------------------------------------------------



Автор: retto 2.3.2010, 14:50
всім дякую. 
тема закрыта smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)