次の最小限の例を考えてみましょう。
#include <vector>
class Data
{
std::vector<int>& v;
public:
Data(std::vector<int>& _v) : v(_v) {}
Data(const std::vector<int>& _v) : v(_v) {} // error!
};
int main()
{
std::vector<int> v;
const std::vector<int> c_v;
Data d(v);
Data const_d(c_v);
return 0;
}
これはコンパイルされません。下からの全体の出力g++ -Wall
。
const.cpp: In constructor ‘Data::Data(const std::vector<int>&)’:
const.cpp:8:41: error: invalid initialization of reference of type ‘std::vector<int>&’ from expression of type ‘const std::vector<int>’
理由は明らかです。constキーワードは8行目のキャストに腹を立てています。問題:Dataクラスが必要な場合もありますが、が必要な場合もありstd::vector
ますconst std::vector
。2つのクラスがあるように:1つはへの読み取りData
用、もう1つはからの読み取り用Data
です。ただし、ほとんど冗長な機能を持つ2つのデータクラスを作成するのは好きではありません。私の質問:
- 私がやろうとしていることをどのように達成できるかについて、良い解決策を教えていただけます
main()
か?C++11ソリューションも大歓迎です:) iterator
これがとの理由const_iterator
ですか?