テンプレートを使用して int を何かにマップするクラスを書きたいと思います。私が考えているのは、一般的に2つのオプションです。
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;
問題は、2 番目のケースで最も効率的な方法/オブジェクトは何かということです。私は何かをすることを考えていました
int2type_storage< std::vector<double> >
しかし、これは最適ではないと感じています。別のオプションは、ポインタを格納することです
int2type_storage< double* >
しかし、マップクラスの外側の N 要素にメモリを割り当て、後で解放するように注意する必要があるという問題があります。
EDIT1: ご回答いただきありがとうございます。2 つの回答を正しいものとしてマークできないことを残念に思います。
EDIT2:
すべてを実装しましたが、リンカーは関数を見つけることができませんでした:
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_;
どうしたの?