C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 59 を表示中)
■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 + 特殊化ついては理解できていないので勉強しておきます。


返信 編集キー/


管理者用

- Child Tree -