我有一个X类,我在这里提供了一个片段:
class X {
public:
template <typename Iter>
X(Iter begin, Iter end) : mVec(begin, end) {}
private:
vector<Y> const mVec;
};
Run Code Online (Sandbox Code Playgroud)
我现在想为这个类添加一个新的连接构造函数,如:
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) : mVec(???) { ??? }
Run Code Online (Sandbox Code Playgroud)
这样的构造函数会将两个范围[begin1,end1]和[begin2,end2]连接到mVec中.挑战是
1)我想在mVec上保留const,因此在X的其他方法中它被认为是常量.
2)如果可能的话,我想避免不必要的副本.也就是说,一种解决方案是使用静态方法将非const临时构造到范围1,插入范围2并返回它,然后将连接构造函数定义为
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2)
: mVec(concatenate(begin1, end1, begin2, end2)) { }
Run Code Online (Sandbox Code Playgroud)
但我认为,这至少会复制一次所有的价值.