template class member funkcja tylko specjalizacja
Czytam cały poradnik o szablonach i jest w nim napisane co następuje:
Gdzie mówi się o specjalizacji szablonu klasy.
Jednakże, jeśli specjalizujesz się w klasie szablon, musisz również specjalizować się we wszystkich funkcje członków. Chociaż jest możliwość wyspecjalizowania jednego członka funkcji, gdy już to zrobisz, możesz nie może już specjalizować się w całości klasy.
Zastanawiam się, jak to jest prawdą, bo można specjalizować się bez każdy członek w ogóle funkcjonuje. Czy to mówi, że nie możesz mieć specjalizacji tylko z jedną funkcją członka, a następnie inną ze wszystkimi funkcjami członka?
Czy ktoś może wyjaśnić?
2 answers
Myślę, że odnosi się to do następującego przypadku:
template <typename T>
struct base {
void foo() { std::cout << "generic" << std::endl; }
void bar() { std::cout << "bar" << std::endl; }
};
template <>
void base<int>::foo() // specialize only one member
{
std::cout << "int" << std::endl;
}
int main() {
base<int> i;
i.foo(); // int
i.bar(); // bar
}
Gdy już to zrobisz, nie możesz przeznaczyć całego szablonu na jakąkolwiek inną rzecz, więc
template <>
struct base<int> {}; // error
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-10 12:50:54
Myślę, że chodzi o to, że możesz albo:
-
Specjalizacja całej klasy i wszystkie elementy składowe (Dane i funkcje, statyczne lub nie, wirtualne lub nie) muszą być zadeklarowane i zdefiniowane, nawet jeśli są takie same jak dla wersji niewyspecjalizowanej,
Specjalizujemy niektóre elementy funkcji, ale wtedy nie możemy specjalizować całej klasy (tzn. wszystkie elementy są zadeklarowane w taki sam sposób jak w przypadku niewyspecjalizowanym, po prostu dostarczamy implementację dla niektórych funkcji członków).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-10 12:50:09