我想编写一些使用模板将 int 映射到某些东西的类。我想到的一般是两种选择:
1. unsigned int -> double (scalar)
2. unsigned int -> double[N] (vector of length N; N is the same for each int)
我写了一堂课
template <class T>
class int2type_storage {
public:
....
private:
typename std::map<unsigned int,T> map_;
}
对于第一种情况,用法很简单:
int2type_storage<double> map1;
问题是,对于第二种情况,最有效的方式/对象是什么?我正在考虑做类似的事情
int2type_storage< std::vector<double> >
但我有一种感觉,这将是次优的。另一种选择是存储指针
int2type_storage< double* >
但是我有一个问题,我应该为映射类之外的 N 个元素分配内存,并注意稍后释放它。
EDIT1:谢谢你们的回答,很抱歉我不能将两个答案标记为正确。
编辑2:
我已经实现了一切,但我的链接器找不到函数:
undefined reference to `int2type_storage<std::tr1::array<double, 4ul> >::init(int, int)'
。H:
template <class T>
class int2type_storage {
public:
int2type_storage() {};
~int2type_storage() {};
void init(const int number, const int index);
...
private:
int cur_index_;
typename std::map<unsigned int, T>::iterator iterator_;
typename std::vector<std::map<unsigned int,T> > map_vector_;
bool zero_initialized;
};
.cpp:
template<class T>
void int2type_storage< T >::init(const int length, const int max_index) {
map_vector_.resize(length);
}
用法:
int2type_storage< std::tr1::array<double, 4> > w_map_;
怎么了?