现在我有
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;
...
}
这是好方法,也许可以在不创建部分专业化的情况下实现它?
答案 0 :(得分:1)
正如您所注意到的,您的问题来自于您在模板参数中添加顶级const
这一事实,但是当涉及到指针时,它会产生T * const
而不是{{1 }}
专业化模板是实现目标的一种方式。
另一种方法是制作一个帮助模板来处理深层的“理解”,并在主模板中使用它。这通常更容易实现,因为它意味着更少的代码重复。有点像:
T const *