簡體   English   中英

模板參數上的C ++函數模板重載

[英]C++ function template overload on template parameter

是否可以像這樣重載函數模板(僅使用enable_if在模板參數上):

template <class T, class = std::enable_if_t<std::is_arithmetic<T>::value>>
void fn(T t)
{

}
template <class T, class = std::enable_if_t<!std::is_arithmetic<T>::value>>
void fn(T t)
{

}

如果enable_if條件不重疊? 我的MSVS編譯器抱怨說'void fn(T)' : function template has already been defined 如果沒有,那么替代方案是什么(理想情況下不將enable_if放在模板參數以外的任何地方)?

默認參數在確定函數的唯一性時不起作用。 所以編譯器看到的是你定義了兩個函數:

template <class T, class>
void fn(T t) { }

template <class T, class>
void fn(T t) { }

那是重新定義相同的功能,因此錯誤。 你可以做的是使enable_if本身成為模板非類型參數:

template <class T, std::enable_if_t<std::is_arithmetic<T>::value, int> = 0>
void fn(T t) { }


template <class T, std::enable_if_t<!std::is_arithmetic<T>::value, int> = 0>
void fn(T t) { }

現在我們有不同的簽名,因此功能不同。 SFINAE將負責按預期從過載裝置中移除一個或另一個。

暫無
暫無

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

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