为什么 Intellisense 不适用于 map<int, T *>?
Why Intellisense does not work for map<int, T *>?
我对智能感知的以下行为感到惊讶,为什么:
template<typename T>
struct Bar {
std::map<int , int *> map;
std::map<int , T *> map2;
std::vector<int *> vec;
std::vector<T *> vec2;
T * doBar(void)
{
map./*displays everything*/
--->map2./*displays only 4 members: at, swap and two operators*/
vec./*displays everything*/
vec2./*displays everything*/
return null;
}
};
这是一个错误吗?或者当第二个是 T/T* 时只显示 4 个成员背后有一些特殊原因?逻辑会告诉我没有理由为任何类型隐藏像 find
或 erase
这样的方法,即使它们是模板化的 second
s。
使用未显示的函数编译代码不会引发任何错误并且似乎可以正常工作。我正在使用 Visual Studio 2012。(并且已经多次删除智能感知数据库)
编辑:它确实似乎是 VS2012 特定的错误,刚刚确认它适用于 VS2013
问题可能是 std::map<int , T *>
在这里是未知类型。可能会有专业化。根据个人经验,专业化往往会混淆 Intellisense。
我对智能感知的以下行为感到惊讶,为什么:
template<typename T>
struct Bar {
std::map<int , int *> map;
std::map<int , T *> map2;
std::vector<int *> vec;
std::vector<T *> vec2;
T * doBar(void)
{
map./*displays everything*/
--->map2./*displays only 4 members: at, swap and two operators*/
vec./*displays everything*/
vec2./*displays everything*/
return null;
}
};
这是一个错误吗?或者当第二个是 T/T* 时只显示 4 个成员背后有一些特殊原因?逻辑会告诉我没有理由为任何类型隐藏像 find
或 erase
这样的方法,即使它们是模板化的 second
s。
使用未显示的函数编译代码不会引发任何错误并且似乎可以正常工作。我正在使用 Visual Studio 2012。(并且已经多次删除智能感知数据库)
编辑:它确实似乎是 VS2012 特定的错误,刚刚确认它适用于 VS2013
问题可能是 std::map<int , T *>
在这里是未知类型。可能会有专业化。根据个人经验,专业化往往会混淆 Intellisense。