我有一个使用'Array'类来表示一维数组的现有代码。这是一个实现为
的基本模板类// Forward declaration
template<typename T> class Array;
// Implementation of 'const' Array class:
template<typename T>
class Array<const T>
{
// ...
};
此类具有只读接口,因此例如元素访问运算符仅出现在其const版本中:
const T& operator[](unsigned int i) const
然后有一个派生自Array
的类,它允许修改其成员数据:
template<typename T>
class Array<T> : public Array<const T>
派生类提供
T& operator[](unsigned int i)
等。除了从父继承的方法。我的任务是执行一些代码重构以扩展Array
的功能。在考虑我的选择时,我想知道是否有一种方法来检测Array
的模板参数的cv限定符,以便我可以例如
template <typename T>
class Array<T>
{
public:
enum { is_const = template_param_is_const<T>::value; }
// ...
};
和is_const
对Array<T>
和Array<const T>
有不同的值。
对于保留Array<T>
和Array<const T>
之间区别的现有实施方案的任何改进以及上述行为的建议也是受欢迎的。