specjalizacja jednej metody z szablonu klas

0

Cześć,

Mam szablon klas niech będzie

template <typename T, int N>
class MyClass
{
  public: void metoda();
  // inne metody
};

Kod metoda() zależy od parametrów T oraz N. Czy da się dokonać CZĘŚCIOWEJ specjalizacji tej metody np dla określonego N? Jedna opcja oczywiście to po prostu w kodzie metody if (N==coś), ale chciałbym to zrobić jak sztuka nakazuje. Z tego co ja się orientuję, to nie można dokonać częściowej specjalizacji funkcji - muszą one mieć pełne specjalizacje. Z klasą się da... czyli niby mógłbym napisać specjalizację MyClass<T, 10> (dla N=10) ale wtedy muszę też przepisać inne metody z klasy bazowej, bo MyClass dla N=10 nie będzie ich widziała...
Jak to zrobić najbardziej elegancko za pomocą właśnie szablonów?

Z góry dziękuję!

0
template <typename T, int N>
class MyClassBase
{
protected:
   T klamoty_wspolne[n];
public:
   void metody_wspolne() {}
};

template <typename T, int N>
class MyClass : public MyClassBase<T, N>
{
public:
   void metoda_szczegolna();  
};

template <typename T>
class MyClass<T, 2> : public MyClassBase<T, 2>
{
public:
   void metoda_szczegolna();  
};

template <typename T>
void MyClass<T, 2>::metoda_szczegolna()
{
   cout << "2\n";
}

template <typename T, int N>
void MyClass<T, N>::metoda_szczegolna()
{
   cout << "N\n";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1