使用用于普通类型(int)和指针的const的Search方法创建数组类

时间:2013-07-05 09:04:46

标签: c++ arrays templates pointers partial-specialization

现在我有

template<class C> class Array
{
inline int Search(const C &value) const;
...
}

我想以这种方式使用

Array<int *> a;
int i;
const int *pi = &i;
a.Search(pi);

但我得到了

  

错误C2664:'A :: Search':无法从'const转换参数1   int *'to'int * const&amp;'

是否有可能以某种方式解决它?

现在只有我能想到这个指针部分专门化,但我不确定。

template<class C> class Array<C*>
{
inline int Search(const C *&value) const;
...
}

这是好方法,也许可以在不创建部分专业化的情况下实现它?

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,您的问题来自于您在模板参数中添加顶级const这一事实,但是当涉及到指针时,它会产生T * const而不是{{1 }}

专业化模板是实现目标的一种方式。

另一种方法是制作一个帮助模板来处理深层的“理解”,并在主模板中使用它。这通常更容易实现,因为它意味着更少的代码重复。有点像:

T const *