[英]“ambiguous call to overloaded function” when using variadic templates in VS2013
[英]'fabs' : ambiguous call to overloaded function when using templates
我有以下功能:
T* tContainer_t<T, R>::Remove( T item )
{
typename R::const_iterator it = std::find_if(Container.begin(), Container.end(), [item](const T* v) { return std::fabs(*v - item) < DBL_EPSILON; });
if (it != Container.end())
{
...
}
else
return NULL;
}
T
可以是int
, double
, float
等。
編譯器給我'fabs' : ambiguous call to overloaded function when using templates
有什么問題,如何解決?
謝謝。
T
可以是int
,double,float
等。
C ++中的std::fabs
有三個重載,分別是float
, double
和long double
。
如果嘗試使用類型為int
的參數調用std::fabs
,則由於重載歧義而將導致編譯錯誤。 一個int
參數平等地匹配所有三個可用的重載。
您可以將參數強制轉換為已知類型(例如, double
或long double
),這將解決歧義,或者您可以將對fabs
的調用包裝在對整數類型參數執行歧義消除的模板中。
另外,C ++具有std::abs
,對於整數和浮點類型(在<cmath>
和<cstdlib>
)都已重載。 此外,如果您最近有一個實現C ++ 11的標准庫實現,則對帶有整數類型實std::fabs
的調用將自動將該實參轉換為double
類型,因此沒有歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.