【发布时间】:2014-01-28 11:19:02
【问题描述】:
假设我有一个使用原始指针的模板:
template<typename T>
void processPointer(T* ptr);
我不希望使用void* 指针调用它。看来我有两个选择。我可以删除非模板重载:
void processPointer(void*) = delete;
或者我可以删除一个模板实例化:
template<>
void processPointer<void>(void*) = delete;
声明非模板重载更容易(不用尖括号)。有什么理由让我更喜欢删除模板实例化吗?
【问题讨论】:
-
+1,因为我自己也不知道答案。我会删除模板实例化,因为我倾向于将整个重载集视为模板。我认为稍后在阅读代码时会更容易理解发生了什么(即遵循最小意外原则)。我不知道选择一种方式是否有技术原因。
标签: c++ templates c++11 overloading