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() - свой
Нужно просто написать эти специализации функции:
template<class T>
class Tree {
public:
//данный метод является селектором (просто выполняет вывод)
//поэтому нужно обьявлять с const
void show() const;
};
class SomeClass1 {
public:
void show() const { std::cout << 1; }
};
class SomeClass2 {
public:
void show() const { std::cout << 5; }
};
template<> void Tree<SomeClass1>::show() const
{
SomeClass1().show();
}
template<> void Tree<SomeClass2>::show() const
{
SomeClass2().show();
}
//для остальных также
//и общее определение
template <class T>
void Tree<T>::show() const
{
std::cerr << std::endl
<< "other specializations";
}
int main() {
Tree<SomeClass1> t1;
Tree<SomeClass2> t2;
t1.show();
t2.show();
Tree<int> t;
t.show();
return 0;
}
Можно написать и одно определение:
template<class T> void Tree<T>::show() const
{
T().show();
}
Но такое определение неразумное, так как не каждый тип имеет такой метод
Возможно вам нужен виртуальный метод с полиморфизмом
class Tree {
public:
virtual void show()
{
cout << "test 1" << endl;
}
};
class SomeClass :public Tree {
public:
void show() override
{
cout << "test 2" << endl;
}
};
int main()
{
Tree show;
SomeClass base;
Tree *weapon = &base; // &show Полиморфизм
weapon->show();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть программно-аппаратный комплекс, состоит из внешнего устройства и ПК с управляющей программойСвязь между устройством и ПК осуществляется...
Подскажите пожалуйста, как растянуть дочерние div в родительском div который имеет width: 100%;Таблица не подходит