C ++模板和模糊函数调用

用户名

我无法控制的某些代码具有许多重载的函数,这些函数接受不同的类型

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的编写者一样为每种类型复制和粘贴我的代码?

贾罗德42

通过定义具有完全匹配项的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++模板和模糊函数调用

来自分类Dev

C ++中的模糊函数调用

来自分类Dev

C ++模板和对重载函数的歧义调用

来自分类Dev

C ++模板和对重载函数的歧义调用

来自分类Dev

C ++ 11 auto,std :: function和对重载函数的模糊调用

来自分类Dev

用于调用函数的C ++模板

来自分类Dev

从C文件调用模板函数

来自分类Dev

继承和模板函数C ++

来自分类Dev

模板类特化函数调用。C ++

来自分类Dev

函数调用运算符的C ++模板

来自分类Dev

C ++:转发模板成员函数调用失败

来自分类Dev

函数指针类型的c ++模板调用

来自分类Dev

C ++继承:调用模板的子类函数

来自分类Dev

调用模板函数C ++时出错

来自分类Dev

c ++调用模板构造函数实例化

来自分类Dev

C ++:调用模板化类的非模板化函数

来自分类Dev

C ++如何使用模板类调用模板函数?

来自分类Dev

C ++模板:从基类调用派生模板类的成员函数

来自分类Dev

C ++模板:调用两个选项之间匹配的函数

来自分类Dev

C ++在调用时指定函数的非模板版本

来自分类Dev

C ++调用嵌套模板类的析构函数

来自分类Dev

没有调用C ++模板化静态成员构造函数

来自分类Dev

如何根据C ++中的模板类型调用函数?

来自分类Dev

在C ++中对模板参数调用静态函数

来自分类Dev

C ++使用模板类调用非静态成员函数

来自分类Dev

调用类内的函数的C ++ 11可变参数模板

来自分类Dev

C ++模板子类调用了错误的父构造函数

来自分类Dev

C ++:在基本模板类中调用派生的专用虚拟函数

来自分类Dev

c ++模板为特定类型的类调用特定的构造函数