首先,由于这一行,您发布的代码无法编译:
public:
vector<T> vector; //maybe i should not initalize this
你应该看到这个错误:
declaration of ‘std::vector<T, std::allocator<_Tp1> > ArithmeticVector<T>::vector’
/usr/include/c++/4.4/bits/stl_vector.h:171: error: changes meaning of ‘vector’ from ‘class std::vector<T, std::allocator<_Tp1> >’
因为您在类模板声明上方引入了整个 std 命名空间,这使得名称“vector”可见,然后您使用它来声明一个对象。这就像写“双双;”。
我想要的是创建 v9 向量或 v1 向量,就像 STL 向量类型一样。
如果这是您想要的,这是执行此操作的代码:
#include <vector>
#include <memory>
template
<
class Type
>
class ArithmeticVector
:
public std::vector<Type, std::allocator<Type> >
{
public:
ArithmeticVector()
:
std::vector<Type>()
{}
// Your constructor takes Type for an argument here, which is wrong:
// any type T that is not convertible to std::vector<Type>::size_type
// will fail at this point in your code; ArithmeticVector (T n)
ArithmeticVector(typename std::vector<Type>::size_type t)
:
std::vector<Type>(t)
{}
template<typename Iterator>
ArithmeticVector(Iterator begin, Iterator end)
:
std::vector<Type>(begin, end)
{}
};
int main(int argc, const char *argv[])
{
ArithmeticVector<double> aVec (3);
return 0;
}
如果您对不同于 STL 中定义的算法(累加等)的向量上的算术运算感兴趣,而不是专注于向量类并添加成员函数,您可以考虑为期望特定向量的向量编写通用算法代替。然后您根本不必考虑继承,并且您的通用算法可以在向量的不同概念上工作。