[英]Specialize a function template in c++?
我必須創建一個通用函數來對C ++中的字符串進行排序,並且必須使用自己的字符串類(已將其實現為SuchString
)進行測試。
我有一個像這樣的模板:
template<typename T, class Sel>
void stringSort(T& lel);
Sel
類包含一個謂詞函數來確定排序依據。
我想專門研究排序功能,以便它可以與我自己的SuchString
類一起正常工作:
template<>
void stringSort<SuchString&>(SuchString& string);
當我這樣做時,我得到了錯誤:
沒有功能模板與功能模板專業化匹配'
stringSort
'
專門化這樣的功能的正確方法是什么? 我不能簡單地重載該函數,因為我需要包含謂詞函數的Sel
類。 我不能將此函數作為簡單的指針參數傳遞給該函數,因為任務是使用模板。
任何幫助表示贊賞。
您的原始模板函數包含兩種類型:
template<typename T, class Sel>
void stringSort(T& lel);
您正在嘗試僅使用一種類型來專門化它。 因此,錯誤。 我不太了解您在這里如何使用Sel
。 我假設您確實打算將其作為參數傳遞:
template<typename T, typename Sel>
void stringSort(T& lel, Sel predicate);
在這種情況下,最簡單的方法是為SuchString
提供重載:
template <typename Sel>
void stringSort(SuchString&, Sel );
重載將優先於模板。
如果您真正需要的是Sel
上的靜態方法,則只需切換模板類型的順序即可:
template <typename Sel, typename T>
void stringSort(T& );
template <typename Sel>
void stringSort(SuchString& );
這樣,如果foo
是SuchString
類型的左值,則stringSort<SomeSel>(foo)
將調用SuchString&
重載,否則將調用T&
版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.