簡體   English   中英

在C ++中專門研究功能模板?

[英]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& );

這樣,如果fooSuchString類型的左值,則stringSort<SomeSel>(foo)將調用SuchString&重載,否則將調用T&版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM