durumda aşağıdaki düşünün:İşlev şablonunun açık uzmanlaştırmasında şablon parametresi nasıl çıkarılır?
#include <iostream>
template <class T> void f(T) { std::cout << "#1\n"; } // #1
template <> void f(const int) { std::cout << "#2\n"; } // #2
int main() {
f<const int>(1); // call #1
f<int>(1); // call #2
return 0;
}
O 2. f<int>(const int)
yerine f<const int>(const int)
gibi görünüyor. Burada ne var? İlk düşüncem üst düzey const
işlev türü dönüşümde atıldı, böylece # 2 tipi void(int)
, f<int>(const int)
özelleştirme ile sonuçlanır. Ama bundan emin değilim.
Ve neden C++ böyle bir sözdizimine izin veriyor? Demek istediğim, fonksiyon şablonlarını uzmanlaştıramazsak, açık bir şekilde uzmanlaşmak istiyorsak, şablon argüman değerini biliyor olurduk. Öyleyse, C++ sadece programcıyı şablon fonksiyonlarını uzmanlaştırırken açık bir şekilde şablon argüman değerleri sağlıyor mu? (yani template <> void f<int>(const int) { }
veya template <> void f<int const>(const int) { }
numaralı telefondan # 1 uzmanlık yazmalıyız) Kodlama kolaylığı dışında özel kullanım var mı? şablonların sorunu bir kenara bırakarak