タイトルで正確に問題に対処してくれて申し訳ありませんが、ここに事があります。
はのは、私は、アダプタだとしましょう、と私は別の機能をリダイレクトする必要があり、以下のリストされている
:constリスト参照引数を変換し、別の関数に渡すうまい方法ですか?
私の所有者が私の関数を呼び出すと、最初にこのように私に引数を渡すことになります。
void receive (const list<Obj>& Larr){
// do some transforming
// Then call "send"
}
そして私は他の誰かを呼び出す必要がありますが、異なるコンテナ引数を持つ:
void send (const vector<Obj*>& Varr){
// ....
}
ので「CONST」の制約のため、明らかに、私は単に 'で行うことはできません以下のような一back反復によって要素の繰り返しの」ポインタ:
void receive (const list<Obj>& Larr){
for (list<Obj>::const_iterator it = Larr.begin(); it != Larr.end(); it++)
// vec is my class member
vec.push_back(&(*it)); // compile error: no match function
// Because expected element is (Obj*) rather than (const Obj*)
}
だから私が考える唯一の方法はLarr内のすべての要素をコピーすることで、その後、私は放送しようとしていた、ベクターに自分のアドレスを一back:
ここで私の質問は、このシナリオでは、インターフェイスを変更することを許可していない、私はこれを達成することができる方法は何ですか?
'constのベクトル&Varr'使用していないのはなぜ?リストをconstにしてはいけません。そうでないと、呼び出し側が予期せぬ変更をindireclyで行うことができます。 –
Phil1970