已删除函数的两个声明之差



我有这个类小部件:

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* = double*推导出Tdouble。在第二个声明的情况下,T被显式指定为double,并且没有进行模板参数推导。

还有第三个等价声明:

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

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

相关内容

  • 没有找到相关文章