我有以下功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
T
可以int
,double
,float
,等....
编译器给了我 'fabs' : ambiguous call to overloaded function when using templates
问题是什么?如何解决?
谢谢.
T
可以int
,双倍float
,等等
有三个重载std::fabs
在C++的float
,double
和long double
.
如果尝试std::fabs
使用类型的参数进行调用int
,则由于过载模糊而导致编译错误.一个int
参数所有三个可用的重载的匹配同样.
您可以将参数转换为已知类型(例如double
或long double
),这将解决歧义,或者您可以将调用包装在fabs
对整数类型参数执行消歧的模板中.
或者,C++有std::abs
,它为整数和浮点类型(在<cmath>
和中声明<cstdlib>
)重载.此外,如果您有最近实现C++ 11的标准库实现,则std::fabs
使用整数类型参数调用将自动将参数转换为type double
,因此不存在歧义.
归档时间: |
|
查看次数: |
4890 次 |
最近记录: |