两个deleted函数声明的区别

迈克尔·图雷克

我有这个类小部件:

class widget_11 {
public:
    template<typename T>
    void process_pointer(T* ptr)
    {
        std::cout << *ptr;
    }
    
};

我的问题是我不明白这两个声明之间有什么区别:

 template<>
 void widget_11::process_pointer(double*) = delete;
 template<>
 void widget_11::process_pointer<double>(double*) = delete;

我的问题是这两个删除函数的定义是否做同样的事情?从我的测试来看,它们都编译并且没有改变代码的工作方式,但也许我在测试时跳过了一些重要的东西

阿特尔

。这都是为了一个明确的专业化声明和定义process_pointerT = double,这样他们就定义了同样的事情,同样的方式。

当您写出显式特化的声明时,模板参数推导可用于填充未指定的类型。在您的第一个声明的情况下,T推断为doublefrom T* = double*在您的第二个声明的情况下,T明确指定为double,并且不进行模板参数推导。

还有第三个等效声明:

template<>
void widget_11::process_pointer<>(double*) = delete;
//  T needs to be deduced here ^^

这些空尖括号可以省略,导致您的第一个声明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章