csi*_*siz 2 c++ templates specialization
如何进行模板专业化,需要2个参数而不是正常1?我正在构建一个指针类,现在我想扩展到一个数组,但如果我尝试这样的东西:
template<class T,int s> class pointer{};
template<class T> class pointer{};
class mama{};
int main(){
pointer<mama> m;
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误.模板...用1参数重新声明.
我需要它专门,因为pointer<mama,10>有size()和operator []而pointer<mama>没有,它有operator->和*.
您可以为数组案例创建一般模板:
template <class TElem, int size = 0>
class pointer
{
// stuff to represent an array pointer
};
Run Code Online (Sandbox Code Playgroud)
然后部分专业化:
template <class TElem>
class pointer<TElem, 0>
{
// completely different stuff for a non-array pointer
};
Run Code Online (Sandbox Code Playgroud)
通过为size = 0的情况定义一个专用版本,实际上可以给出一个完全不同的实现,但名称相同.
但是,仅仅给它一个不同的名称可能更清楚.