簡要說明,正常函數重載將更好地服務於此示例。它只是作爲學習模板編程的一種方式。話雖如此,但與功能模板專業化相比(儘管這可能有其自身的問題),歡迎您評論使用函數超載的好處/差異。匹配模板專業化分辨率的多種類型
請看下面的例子:
template <typename T>
inline void ToString(T value, char* target, size_t max_size);
template <>
inline void ToString<float>(float value, char* target, size_t max_size)
{
snprintf(target , max_size , "%f" , value);
}
template <>
inline void ToString<double>(double value, char* target, size_t max_size)
{
snprintf(target , max_size , "%f" , value);
}
就只有這麼寫同時匹配float
和double
類型,這些專業化的一種方式?
基本上我設想寫一個模板專用的模板類型,將同時匹配float
和double
(如排序「浮動或雙」類型匹配的),但我不知道這是否是有可能的話用C++。也就是說,我以前看過意想不到的模板魔法,所以我認爲這是一個很好的問題。
如果你想要的東西匹配多個具體類型,那麼這是部分專業化,這是不允許的功能。 –
hi @Kerrek,我對部分專業化的理解是關於專門化模板參數的一個子集。我在這裏只有一個模板參數。我不關注在這裏如何實現部分專業化 – lurscher
部分專業化意味着結果仍然是一個模板,而不是一個類型。考慮例如'template struct X;模板結構X ;'這是部分。 –