簡體   English   中英

'fabs':使用模板時對重載函數的歧義調用

[英]'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可以是intdoublefloat等。

編譯器給我'fabs' : ambiguous call to overloaded function when using templates

有什么問題,如何解決?

謝謝。

T可以是int ,double, float等。

C ++中的std::fabs有三個重載,分別是floatdoublelong double

如果嘗試使用類型為int的參數調用std::fabs ,則由於重載歧義而將導致編譯錯誤。 一個int參數平等地匹配所有三個可用的重載。

您可以將參數強制轉換為已知類型(例如, doublelong double ),這將解決歧義,或者您可以將對fabs的調用包裝在對整數類型參數執行歧義消除的模板中。

另外,C ++具有std::abs ,對於整數和浮點類型(在<cmath><cstdlib> )都已重載。 此外,如果您最近有一個實現C ++ 11的標准庫實現,則對帶有整數類型實std::fabs的調用將自動將該實參轉換為double類型,因此沒有歧義。

暫無
暫無

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

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