这是正确使用std :: forward吗?

时间:2017-02-06 02:57:47

标签: c++ forward

我有一个名为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;
}

另外,有点偏离主题,如何优化&&参数的追加方法?

0 个答案:

没有答案