Здравствуйте, 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 >>