创建模板化的矢量类时,允许使用其大小类型的最佳方法是什么?从我所收集的内容看来,它好像是为真实的矢量类创建一个接口,然后使用它。如使用常见矢量大小类型的最佳方法是什么?
for(VectorBase::size_type i = 0; i < test1.size(); ++i)
这对于使代码更清洁,不必知道Vector的模板类型(如果它的变化)的优势
for(Vector<int>::size_type i = 0; i < test1.size(); ++i)
。
对于我的实现的例子(如果有更好的方法,这里是我如何创建它)。
class VectorBase
{
public:
typedef unsigned int size_type;
protected:
size_type mCount;
public:
VectorBase() { mCount = 2; }
virtual ~VectorBase() = 0 { }
size_type size() const { return mCount; }
};
template<typename Type>
class Vector : public VectorBase
{
public:
Vector() : VectorBase() { }
~Vector() { }
};
int main(void)
{
Vector<int> test1;
for(VectorBase::size_type i = 0; i < test1.size(); ++i)
{
cout << i << endl;
}
system("PAUSE");
return(0);
}
(注意:请不要将它变成“只使用xxx向量类”)。
如果发现你希望你的'size_type'取决于你的模板参数会发生什么? – Grizzly 2012-01-11 18:18:11
我宁愿通过迭代器访问索引访问 - 它更加通用和灵活,除非实际的索引值本身具有某些含义。 – 2012-01-11 18:26:01
@ Grizzly,我不关心我的size_type来自模板参数。它永远都是一样的。 – mmurphy 2012-01-11 18:28:43