Re: Ошибка в компиляторе VC7
От: Leshi Россия  
Дата: 30.03.05 09:06
Оценка:
Здравствуйте, danikin, Вы писали:

[skip]
Думаю, все-таки в pb лежит правильный объект (в смысле Derived<int>), а вот typeid косячит. Если на это не полагаться, тогда жить можно. Виртуальные функции вызываются как надо. В смысле
template <typename T>
class Base { public: virtual ~Base() {}; virtual void foo(){std::cout<<"--"<<std::endl;}; };
template <typename T>
class Derived : public Base<T> { public: virtual void foo(){std::cout<<"!!"<<std::endl;};};

Base<int> *pb;

void f()
{
    pb->foo();
    std::cout << "f(): " << typeid(*pb).name() << std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    pb = new Derived<int>;
    std::cout << "main(): " << typeid(*pb).name() << std::endl;
    f();
    std::cout << "main(): " << typeid(*pb).name() << std::endl;
    return 0;
}

Выдает:
main(): class Derived<int>
!!
f(): class Derived<int>
main(): class Derived<int>

Как ему и положено. Если вызов виртуальной функции грохнуть, тогда лажа. Думаю, все же это не совсем глюк. Что-то кажется было про typeid и виртуальные функции...
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.