Самый простой способ - сделать эту функцию шаблоном:
template <class t>
void bar(MyClass<t>& m) {
// ...
}
Обратите внимание, что это, вероятно, должно быть const MyClass<t>&
, потому что вам не нужно его изменять.
Ваш новый код не имеет смысла. Не существует такого объекта как MyClass
, потому что MyClass
является шаблоном . Если вы хотите работать с этими классами независимо от их аргумента шаблона, то вам нужно выделить не шаблонные части как базовый класс:
class MyClassBase
{
public:
// polymorphic base classes should always have virtual destructors
~MyClassBase() {}
virtual void some_function() = 0;
};
template <typename T>
class MyClass : public MyClassBase
{
public:
// implement abstract functions
void some_function()
{
// template argument T is available here
}
};
Затем вы можете обратиться к этой базе, и при вызове виртуальной функции она будет динамически отправлять:
class Container
{
public:
// no magic: use a std::vector for dynamic arrays
std::vector<MyClassBase*> array; // not by value! avoid slicing
void bar(MyClassBase& m)
{
array.push_back(&m);
}
void baz()
{
array[0]->some_function(); // for example
}
};