Ну, если метод не зависит от параметра шаблона, вы можете сделать это только с помощью наследования AFAIK.
Недостаток: больше кода + наследование
Потенциал: (много)генерируется меньше кода, в зависимости от того, какие части вашего кода на самом деле зависят от шаблона.В приведенном ниже примере метод NonDependentMethod
сгенерирует только одну сборку, а DependentMethod
сгенерирует столько же, сколько существует различных параметров шаблона (в данном случае только один, но создайте MyClass<float>
, а у вас два и т. Д.).
#include <iostream>
using namespace std;
class MyClassBase
{
public:
void NonDependentMethod();
};
template <class T> class MyClass : public MyClassBase
{
public:
void DependentMethod(T param);
};
void MyClassBase::NonDependentMethod()
{
cout << "NonDependentMethod << endl;
}
template<class T> void MyClass<T>::DependentMethod(T param)
{
cout << "DependentMethod " << param << endl;
}
int main() {
// your code goes here
MyClass<int> cls;
cls.NonDependentMethod();
cls.DependentMethod(2);
return 0;
}