さまざまな状況で、多くの関数で処理する必要があるオブジェクトのコレクション (ベクトルなど) があります。オブジェクトを変更する必要がある関数もあれば、そうでない関数もあります。オブジェクトのクラスは、抽象基本クラスから継承できます。したがって、私は次のようなものを持っています:
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
const
inreference_wrapper
の引数を使用しない
これらはどれも非常にエレガントに見えません。他にできることはありますか?