[英]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.