在各种情况下,我有一个需要由许多函数处理的对象集合(例如向量)。有些函数需要修改对象,而有些则不需要。对象的类可以从抽象基类继承。因此,我有这样的事情:
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()
和T const & get() const
而不是T& get() const
- 使用例如采用包装器而不是向量的方法进行重构
- 有和没有向量的副本
const
- 不使用
const
inreference_wrapper
的论点
这些看起来都不是很优雅。还有什么我可以做的吗?