具有2或1个模板参数的相同类

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->和*.

Dan*_*ker 8

您可以为数组案例创建一般模板:

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的情况定义一个专用版本,实际上可以给出一个完全不同的实现,但名称相同.

但是,仅仅给它一个不同的名称可能更清楚.