Vandevoorde ve Josuttis'in "C++ Şablonları The Complete Guide" (bu arada oldukça iyi görünüyor) okuyorum. Bu iddia (bölüm 3.3) yanlış görünüyor. and is not in the published errata:Bu ders kitabı yanlış mı? Bazı üye fonksiyonları uzmanlaşan ama diğerleri değil
Eğer bir sınıf şablonunu uzmanlaşırsanız, tüm üye fonksiyonlarını da uzmanlaşmalısınız. Tek bir üye fonksiyonunu uzmanlaştırmak mümkün olsa da, bunu yaptıktan sonra artık tüm sınıfı uzmanlaştıramazsınız. gcc şablonu
Oysa Aşağıdaki derler
<typename T>
struct C {
T foo();
T bar();
};
template <>
struct C<int> {
int foo();
int bar() {return 4;}
};
template <typename T>
T C<T> :: foo() {return 0;}
template <typename T>
T C<T> :: bar() {return 1;}
int C<int> :: foo() {return 2;}
template <>
float C<float> :: bar() {return 3;}
#include <cassert>
int main() {
C<int> i;
C<float> f;
assert (2 == i .foo());
assert (0 == f .foo());
assert (4 == i .bar());
assert (3 == f .bar());
}
Ben C<int>::foo
uzmanlaşmış ve C<float>::bar
yüzden, ders kitabı, yanlış standardın ötesinde gcc veya ben bütün durumu yanlış anlama ben?
Teşekkürler.
Kuralı yanlış. Bir üye fonksiyonunu uzmanlaştırdıktan sonra, diğer tüm tiplerde değil, aynı türde bir sınıfı uzmanlaşamazsınız. –