Существует два класса A и B, где A является базовым классом, а B является производным классом:
template <typename T>
class A {T a;};
template <typename T>
class B: public A <T> {T b;};
и следующий класс, представляющий модифицированный контейнер
template <typename Item>
struct TItems {typedef std::vector <Item> Type;};
template <typename Item>
class ModCont
{
private:
typename TItems <Item>::Type items;
};
Функция test () имеет указатель на контейнер объектов A в качестве формального параметра:
template <typename T>
void test ( ModCont <A <T> > *it) {}
Я бы хотел применить полиморфизм и передать контейнер B для теста метода:
int main(int argc, char* argv[])
{
ModCont < A <double> > a_items;
ModCont < B <double> > b_items;
test (&a_items); //Works
test (&b_items); //Does not work
return 0;
}
Единственный способ, который я нашел, - шаблонизировать параметр метода test () следующим образом:
template <typename Object>
void test ( ModCont <Object> *it) {}
Есть ли способ, как использовать полиморфизм "функции" вместо полиморфизма компиляции (шаблоны?)
Спасибо за вашу помощь ...