簡體   English   中英

推導模板參數順序?

[英]Deduced template parameter order?

根據標准,以下內容格式正確:

// 1 : Deduced template parameter in the normal order
template<typename T, typename T1 = typename std::conditional<std::is_fundamental<T>::value, T, int>::type>
void f(T x);

// 2 : Deduced template parameter in the inverted order
template<typename T1 = typename std::conditional<std::is_fundamental<T>::value, T, int>::type, typename T>
void f(T x);

// 3 : Deduced template parameter before a function pointer
template<typename T>
void f(T x, void(*g)(int, int, T*));

// 4 : Deduced template parameter after a function pointer
template<typename T>
void f(void(*g)(int, int, T*), T x);

// 5 : Deduced template parameter with inversed variables
template<typename T, typename T1 = typename std::conditional<std::is_fundamental<T>::value, T, int>::type>
void f(T1 x, T y);

// 6 : Inverted deduced parameter
template<typename T, typename T1>
void f(T1 x, T y);

在3和4的情況下,如果從變量和函數內部傳遞的類型不同,則將選擇哪種類型:函數之一還是變量之一?

(2)格式錯誤,因為T1在聲明之前在默認模板參數中使用T 其余的格式良好。

在(3)和(4)中,如果T必須從函數參數來推斷,然后T必須推導在於它用於在每個地方相同的類型。 即,如果根據其在第一函數參數中的使用推論為一種類型,並且推導為與其在第二功能參數中的用法不同的類型,則推論將失敗並且該用法格式不正確。

在(5)中,將永遠不會使用T1的默認參數-使用特殊化時將指定實際參數,或者將從函數參數x推導出模板參數。

關於(6),沒有什么特別的:如果所有的模板參數都是從函數參數中推導出來的,那么聲明模板參數的順序就無關緊要了。

暫無
暫無

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

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