Задать вопрос
YyyzzzxxxI
@YyyzzzxxxI

Как переопределить функцию в шаблоне с++?

template<class T>
class Tree{
****
public:
****
void show();
}

-----
class SomeClass{
***
public:
void show(){
 cout << 5;
}
}

-------

int main(){
Tree<SomeClass> t;
t.show();
}


Собственно, имеется шаблонный класс tree. Есть еще класс SomeClass, в котором есть метод show.
Создается дерево объектов SomeClass. И нужно его вывести.
Как это сделать?

Проблема в том, что таких SomeCLass будет несколько штук, я хочу в каждом определить свой метод show
И чтобы когда я обращался к Tree< SomeClass1 >.show() вызывался свой show,
для Tree< SomeClass2 >.show() - свой
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой 12 комментариев
Пригласить эксперта
Ответы на вопрос 2
@rPman
Все свои SomeClassX породите от базового SomeClass определенным виртуальным методом show, тогда шаблон не понадобится, просто в классе Tree в методе show(SomeClass t) напишите t->show() а сам show определите в каждом SomeClassX свой.
Ответ написан
@laphroaig
Можно через наследование:
template<typename T>
class Tree: public T 
{
// ... здесь show объявлять не нужно
};

Или аггрегацию
template<typename T>
class Tree
{
  T _some;
public:
  void show()
  {
    _some.show()
  }
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы