[英]Specialize member function for partially specialized class
我正在編寫一個包含基本類型並為標量類型調用基本運算符的類。
template<typename _Ty>
class Fundamental {
using DataType = _Ty;
public:
Fundamental(const DataType& value): value(value) {}
operator DataType() { return value; }
template<typename _Ty2>
void operator+=(_Ty2 value) { this->value += value; }
DataType value;
}
我制作了operator+=
模板,因此它可以采用任何值而不僅僅是 DataType。 最終允許我添加float
和int
, char
和int
等等!
指針不是 C++ 中的基本類型,但我也需要實現它。 然而,指針類型只能用整數加減(這就是我需要的)。 所以,要做到這一點,我想到了部分專門化我的指針類並完全專門化operator+=
以采用int
之類
template<>
template<typename _Ty>
void Fundamental<_Ty*>::operator+=(int value) { this->value += value; }
然而這不起作用並且編譯器抱怨
Fundamental<_Ty*>::operator +=': unable to match function definition to an existing declaration
如何讓操作員只接受整數作為指針?
我嘗試使用聲明
template<typename T>
using Param = typename std::conditional<std::is_pointer<DataType>::value, int, T>::type;
template<typename _Ty>
void operator+=(Param<_Ty> value) { this->value += value; }
出現錯誤說'...沒有定義此運算符...'。
模板專業化不會刪除默認模板,它只是使一個“特殊”。
現在,您可能可以使用一些 SFINAE 使默認值無效,但正確的方法是簡單地從您的指針特化中省略模板並使用簡單的、僅限 int 的方法。
template<class T>
class Fundamental<T*> {
//...
// not a template
void operator += (int x) { ... }
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.