Мне нужно передать шаблон как аргумент функции, но шаблон должен принимать все наследуемые объекты.Наследование C++ в параметре шаблона
Например:
template <class T>
class Template {
public:
Template() {}
};
// IMPORTANT: must accept all children of "Base"
class Test {
Template<Base> *pointer;
public:
Test(Template<Base> *pointer) {...}
};
main() {
Template<Base> *base = new Template<Base>();
Template<Child1> *child = new Template<Child1>();
Test *test1 = new Test(base); // WORKING
// NEXT LINE IS IMPORTANT:
Test *test2 = new Test(child); // ERROR: no matching function for call to 'Test::Test(Template<Child1>*&)'
}
class Base {...};
class Child1 : public Base {...};
class Child2 : public Base {...};
..
мне нужен самый эффективный способ, как сохранить шаблон в классе «Test», который будет принимать все детские классы. У меня много детских занятий.
1) Возможно ли сделать какое-то литье (static_cast) для класса Child в аргументе? Будет полезно использовать его внутри «Шаблон» или внутри класса «Тест». Нет, при создании нового объекта «Test», потому что будет много новых объектов.
2) Или передать аргумент без аргумента шаблона Test(Template *pointer) {...}
?
Или как его решить?
'Шаблон' полностью не связан с шаблоном '. Это совершенно разные классы. В зависимости от того, что вы пытаетесь сделать, тип стирания может быть жизнеспособным вариантом. –
Cornstalks
Есть ли что-нибудь, что мешает вам иметь базовый класс (не templated) в Template и хранить его вместо этого в вашем классе Test? –
coyotte508
@ coyotte508: да, приемлемое решение, но я хотел бы знать, если есть какое-либо прямое решение для наследования параметров шаблона. – Nick