无法在 visual studio 代码中为 std::map 中的内部 class 成员获取一些自动建议 (Intellisense)

Not able to get some autosuggestions for inner class members in std::map in visual studio code (Intellisense)

我目前正在制作反向地图class bidir_map。可以在终端中使用 GCC 编译代码,因此类型和成员应该在范围内,但 Intellisense 不会为代码的特定部分提供自动建议,例如std::pair<K,V> 位成员(但它确实向 std::map 位成员提出建议)。这是什么原因,有没有办法让Intellisense通过std::mapstd::pair<K,V>的内部结构给出建议?

#ifndef BIDIR_MAP_H
#define BIDIR_MAP_H
#include <map>
#include <algorithm>
#include <iterator>
#include <utility> // std::pair
#include <exception>
using std::map;

template <typename K, typename V>
class bidir_map : public map<K,V> {
    using map<K,V>::map; 
    using map<K,V>::at;

public:
    const K& at(const V v) const {
        auto it = this->lookup(this->cbegin(), v); // <-- vscode displays `<unknown> bidir_map<K, V>::cbegin`
        if (it != this->cend()) {
            return it->first;
        } else {
            throw std::out_of_range("value not found");
        }
    }
private:
    using map_t = typename map<K,V>;
    using iter_t = typename map_t::const_iterator;
    iter_t lookup(iter_t first, const V &v) const {
        using val_t = typename map_t::value_type;
        return std::find_if(first, this->cend(), 
[&](const val_t e){ return e.second == v; }); // <-- e doesn't give autosuggestion for second
    }
};

#endif

IntelliSense 无法提供依赖于模板参数类型的成员名称。示例:大多数模板参数类型可能存在某个成员函数,但对于某些类型,class 可能具有未定义此类函数的特化。由于我们尚未提供任何具体类型,因此 IntelliSense 无法事先知道此类函数名称是否可用。

一种解决方法是临时给模板具体类型。 Visual Code 2019 似乎有一个 Template IntelliSense,它允许您切换具体参数类型的模板参数类型。很遗憾 Visual Studio 代码目前没有此功能。