我有模板类vector<typename T,size S>
(我必须使用此而不是std::vector
)。我想指定一个类型为vector<double,2>
的别名,但我还需要计算所有已创建的和所有当前活动对象的数量。这是我的模板类的片段:
template<typename T, size S>
class vector{
private:
T *_values;
public:
vector():
_values(new T[S]){
for(int i =0; i < S; i++)
_values[i] = T();
}
~vector(){
delete[] _values;
}
};
所以我考虑创建名为vector2D
的类,它继承vector<double,2>
并使用两个额外的静态变量来计算其数量。但是怎么做呢?如何调用超类构造函数和析构函数,使其只包含这两个静态变量的递增/递减? vector2D
将在我必须做的项目中经常使用。也许有更好的解决方案?
P.S如何初始化*_values
?我试过*_values = { 0 }
但它没有用(当然假设这将是一个原始类型的表)。
答案 0 :(得分:1)
我想指定一个类型为
的别名vector<double, 2>
那很简单:
typedef vector<double, 2> vector2D
但我还需要计算所有创建的和当前所有活动对象的数量。
这也很简单。这是一个小例子:
#include <iostream>
template <typename T, int S>
class vec {
public:
vec() {
++obj_counter;
}
static int obj_counter;
};
template <typename T, int S>
int vec<T, S>::obj_counter = 0;
typedef vec<double, 2> vec2d;
int main() {
vec<int, 1> intvec1;
vec<int, 1> intvec12;
vec2d doublevec2;
std::cout << vec2d::obj_counter << std::endl;
return 0;
}
这样做的好处是obj_counter
适用于所有类型。在上面的示例中,如果键入:
std::cout << vec<int, 1>::obj_counter << std::endl;
它会打印2
。