необходимо вывести тип производного класса
От: DmitryShm Россия  
Дата: 26.01.08 16:59
Оценка:
Сформулирую вопрос на синтетическом тесте. Допустим имеется такой код

#include <iostream>

using namespace std;

class Base{};
class Derived : public Base {};

template<typename T> void Run(T *)
{
    cout << "Run<T>" << endl;
}

template<> void Run<Derived>(Derived *)
{
    cout << "Run<Derived>" << endl;
}

int main()
{
    Derived * pD = new Derived();
    Base * pB = pD;

    Run(pD);
    Run(pB);

    return 0;
}


Требуется, чтобы вызовы Run(pD) и Run(pB) работали одинаково.

Пример синтетический. В реале вместо указателей используются boost::shared_ptr. Имеется массив из boost::shared_ptr<Base> в котором хранятся указатели на объекты полиморфных классов. Требуется, чтобы по передаче в шаблонную функцию элементов этого массива отрабатывали кастомизированные шаблонные уточнения шаблонных функций (частично уточненные тоже).

Скажу сразу, что вериницу вызовов типа


if (Derived1 * pd1 = dynamic_cast<Derived1 *>(pBase))
{
    Run<Derived1 *>(pd1);
}
else if (Derived2 * pd2 = dynamic_cast<Derived2 *>(pBase))
{
   Run<Derived2 *>(pd2);
}
if
...
else if (DerivedN * pdN = dynamic_cast<DerivedN *>(pBase))
{
   Run<DerivedN *>(pdN);
}


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