【发布时间】:2021-04-03 19:11:21
【问题描述】:
我正在编写一个适配器类来允许我这样写:
for (auto item : ButFirst(myvec)) { ... }
当参数为 lval 时,以下类定义效果很好:
template <typename Container>
class ButFirst {
const Container& container_;
public:
ButFirst(const Container& container) : container_(container) {}
typename Container::const_iterator begin() { return ++(container_.begin()); }
typename Container::const_iterator end() { return container_.end(); }
};
但是,当参数是 rval 时,我也想使用它,如:
for (auto item : ButFirst(get_vec(3)) { ... }
因此,我将编写以下类定义:
template <typename Container>
class ButFirst {
const Container container_;
public:
ButFirst(Container&& container) : container_(std::move(container)) {}
...
};
如何编写一个同时处理两者的类定义?或者可能是一个类和一些部分模板专业化?
【问题讨论】:
-
ButFirst(const Container& container)应该适用于两者,因为我们可以将右值引用保存到 const 引用中。 -
@martin 引用生命周期延长不够长。
标签: c++ templates overloading rvalue-reference