Czy możliwe jest uzyskanie dostępu do wartości parametrów szablonu non-type w specjalnej klasie szablonów?Czy możliwe jest uzyskanie dostępu do wartości parametrów szablonu non-type w specjalnej klasie szablonów?
Jeśli mam klasy szablonu specjalizacji:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
Wiem, że powyższy przypadek, to jest proste hardcode wartości 4 i 0 zamiast przy użyciu zmiennych lecz co mam większą klasę, że jestem specjalizującą i chciałbym móc uzyskać dostęp do wartości.
Czy w A < 4,0> można uzyskać dostęp do wartości major
i minor
(4 i 0)? Czy muszę przypisać je na szablonie instancji jako stałe:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
Jeśli specjalizujesz się w oparciu o wartości, oznacza to, że w tych konkretnych wartościach jest coś szczególnego. Jeśli używasz ich jako ogólnych wartości w całym szablonie i traktujesz je jako specjalne tylko w kilku miejscach, może to oznaczać, że możesz oddzielić specjalne zachowanie na mniejszy wyspecjalizowany szablon klasy, pozostawiając duży szablon jako w pełni ogólny i niespecyficzny. Trudno powiedzieć, czy możesz rozwinąć swoje pytanie, aby było bardziej "prawdziwe"? –
Myślę, że pytanie jest wystarczająco prawdziwe. Mam istniejącą klasę bazową, która implementuje określone zachowanie w oparciu o wersję protokołu. Poprzednio miał członka, który zwrócił wersję protokołu - ponieważ ten członek nie był już dostępny, istniała metoda logowania, która zawierała wersję protokołu na wyjściu. Mogłem po prostu zakodować wartości, ale chciałem się dowiedzieć, czy jest lepszy sposób. Przyjęta odpowiedź zapewnia dobry sposób robienia tego - w rzeczywistości używam cech w podobny sposób w innych miejscach - w celu uzyskania typów parametrów, ale intencja jest taka sama. – stefanB