我有一个名为core_table
的班级,有两个成员:
std::list<std::pair<K, V>> data;
std::set<iterator, compare> gate; // gate contains pointers to the pairs!
我的所有插入都基于此方法。这是std::forward?
一切正常,没有问题。我对std::forward
的理解是它按原样转发参数,从而利用了重载运算符和其他也使用std::forward
的模板。
在检查Visual Studio中的std::list
实现时,其大多数方法(如push_back,emplace,emplace_back等)确实使用了std::forward
。
template <typename K, typename V>
core_table & insert(const_iterator cit, K && k, V && v) {
auto const it = gate.find(k);
if (it != gate.end()) {
(*it)->second = std::forward<V>(v);
return *this;
}
gate.emplace(data.emplace(cit, std::forward<K>(k), std::forward<V>(v)));
return *this;
}
使用insert
实现的其他方法:
template <typename K, typename V>
core_table & push(K && k, V && v) {
return insert(data.end(), std::forward<K>(k), std::forward<V>(v));
}
core_table & append(core_table const & ct) {
for (auto const & e : ct) {
push(e.first, e.second);
}
return *this;
}
另外,有点偏离主题,如何优化&&
参数的追加方法?