2009/03/10(Tue) 11:57:56 編集(投稿者)
> 親の Data クラスのポインタしか受け取れないとき、これらのデータにアクセスする方法はないでしょうか?
たとえできたとしても
> int sum3 = std::accumulate(p1->begin(), p1->end(), 0); //これを実現する方法はあるかな?
> int sum4 = std::accumulate(p2->begin(), p2->end(), 0); //これを実現する方法はあるかな?
戻り値の型が int であることをどうやって知る?
std::vector<std::string> m_Data;
std::list<double> m_Data;
かもしんないよね?
型はint確定だってんなら、↓こんなお茶の濁しかたなら。
#include <numeric>
#include <vector>
#include <list>
class Data {
public:
virtual int accumulate() const =0;
};
class DataVector : public Data {
public:
std::vector<int> m_Data;
virtual int accumulate() const { return std::accumulate(m_Data.begin(), m_Data.end(), 0); }
}
class DataList : public Data {
public:
std::list<int> m_Data;
virtual int accumulate() const { return std::accumulate(m_Data.begin(), m_Data.end(), 0); }
}
main()
{
DataVector data1;
DataList data2;
Data *p1 = &data1;
Data *p2 = &data2;
int sum3 = p1->accumulate();
int sum4 = p2->accumulate();
}