さまざまな状況で、多くの関数で処理する必要があるオブジェクトのコレクション (ベクトルなど) があります。オブジェクトを変更する必要がある関数もあれば、そうでない関数もあります。オブジェクトのクラスは、抽象基本クラスから継承できます。したがって、私は次のようなものを持っています:
class A
{
public:
virtual void foo() const = 0;
virtual void bar() = 0;
/* ... */
};
void process_1(std::vector<std::reference_wrapper<A>> const &vec);
void process_2(std::vector<std::reference_wrapper<A const>> const &vec);
明らかに (?) とstd::reference_wrapper<A>の両方に s のprocess_1同じベクトルを渡すことはできませんprocess_2。これまでに検討したソリューションには次のものがあります。
- C スタイルのキャストまたは
reinterpret_castへの参照を使用するvec T& get()andT const & get() constの代わりに独自の参照ラッパーを作成するT& get() const- ベクトルの代わりにラッパーを取るメソッドなどによるリファクタリング
- ベクトルのコピーを含む、または含まない
const constinreference_wrapperの引数を使用しない
これらはどれも非常にエレガントに見えません。他にできることはありますか?