■33820 / ) |
Re[7]: クラスの継承とイテレータ |
□投稿者/ びーしむ (4回)-(2009/03/10(Tue) 17:43:28)
|
επιστημη さん、774RRさん、回答ありがとうございます。
> Data< std::vector<int> > user_data;
> みたいに使っちゃいかんのかしら?
こうですか?
template<typename Container>
class Data {
public:
Container m_Data;
};
template<typename T>
int AccumulateHelper(Data<T> *p)
{
return std::accumulate(p->m_Data.begin(), p->m_Data.end(), 0);
}
main()
{
Data<std::vector<int> > data1;
Data<std::list<int> > data2;
int sum1 = AccumulateHelper(&data1);
int sum2 = AccumulateHelper(&data2);
}
>不明な持ち方しているデータを、データの持ち方知らないルーチンで演算したい
>ってのは無理な話。
ここを解決するために std::list のような begin(), end() と取得したイテレータ?に ++, -- がある
class Data が定義できればと考えました。
自分の例の場合はデータの型に汎用性は必要ないので
下記のインターフェースをもつ class Data のポインタを受け渡しすればと思ったのですが。
この考え方が間違ってるのかなぁ・・・
class Data {
public:
class const_iterator {
int operator * ()const;
int operator ++ ();
int operator -- ();
...
};
virtual const_iterator begin()const;
virtual const_iterator end()const;
};
template + 特殊化ついては理解できていないので勉強しておきます。
|
|