我无法控制的某些代码具有许多重载的函数,这些函数接受不同的类型
即
setValue(int)
setValue(std::string)
setValue(bool)
而且我有一个模板函数,理想情况下,可以采用这些类型中的任何一种并将其传递给正确的setValue函数。
template <class T>
do_something(T value) {
...
setValue(value);
但是我得到这个错误
error: call to member function 'SetValue' is ambiguous
我能做些什么来解决此问题,而无需像setValue的编写者一样为每种类型复制和粘贴我的代码?
通过定义具有完全匹配项的SetValue并转发到正确的重载。
void setValue(int i) { setValue(static_cast<double>(i)) }
或(如果您有很多具有相同类型的“ setValue”函数),则可以帮助编译器选择要使用的重载,如下所示:
void setValue(char a);
void setValue(double a);
template <typename T>
struct TypeToUseFor
{
typedef T type;
};
template <>
struct TypeToUseFor<int>
{
typedef double type;
};
template <class T>
void func(T value)
{
setValue(static_cast<typename TypeToUseFor<T>::type>(value));
// setValue(value);
}
int main() {
func(0); // int -> ?
func('0'); // exact match
func(0.0); // exect match
func(0.f); // float -> double
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句