Załóżmy, że mam następujące klasy:Specjalizacja metody klasy szablon
template <typename T>
class MyClass
{
public:
void SetValue(const T &value) { m_value = value; }
private:
T m_value;
};
Jak mogę napisać wyspecjalizowaną wersję funkcji, dla t = float (lub innego typu)?
Uwaga: Proste przeciążenie nie wystarczy, ponieważ chcę tylko, aby funkcja była dostępna dla T = float (tj. MyClass :: SetValue (float) w tym przypadku nie ma sensu).
Twoja częściowa odpowiedź na szablon specjalizacji trafia w sedno! Właśnie tego szukałem, dzięki. –
W drugim przykładzie jest to wyraźna specjalizacja szablonów: Zapewniasz wszystkie 1 z 1 argumentów (szablonów) szablonu, gdyby były, musiałbyś dostarczyć 2. Kolejną kwestią jest, że te wyspecjalizowane funkcje najwyraźniej muszą znajdować się w oddzielnej jednostce kompilacji (nie w pliku nagłówkowym), jeśli umieścisz szablon w pliku nagłówkowym i umieścisz go dwukrotnie. – Markus