有没有办法让XCode在快速帮助中显示C ++变量类型?目前,当选择一个变量时,它只显示"声明为int foo.cc"。
在AppCode中,这适用于" auto"变量,因为它显示扣除的变量类型。
它适用于方法。
目前使用XCode 7.2。
答案 0 :(得分:2)
我不认为它可以在XCode 7.2(或更低版本)
中使用到目前为止,我能找到的最接近的是强制XCode向您显示错误。例如。让我们说你有这个代码:
template<typename K, typename V>
std::map<K, V> createMap()
{
return std::map<K, V>();
}
void process()
{
auto myMap = createMap<std::string, int>();
// ...
}
你需要找出myMap变量的类型。
创建助手类和宏:
template <typename T> class DeductTypeCatcher {
public:
DeductTypeCatcher() { T t = (void***)0; }
};
#define SHOW_DEDUCT_TYPE(t) DeductTypeCatcher<decltype(t)> __catcher__;
然后添加到原始代码中:
void process()
{
auto myMap = createMap<std::string, int>();
SHOW_DEDUCT_TYPE(myMap)
}
并且XCode会立即显示错误:
No viable conversion from 'void ***' to 'std::__1::map<std::__1::basic_string<char>, int, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, int> > >'
或者让我们说你有这个代码:
void process()
{
auto myMap = createMap<std::string, int>();
for (auto it : myMap) { /*...*/ }
}
并希望找出&#34;它&#34;的类型:
void process()
{
auto myMap = createMap<std::string, int>();
SHOW_DEDUCT_TYPE(*myMap.begin())
for (auto it : myMap) { /*...*/ }
}
会显示错误:
Non-const lvalue reference to type 'std::__1::pair<const std::__1::basic_string<char>, int>' cannot bind to a temporary of type 'void ***'
我知道这不是一个完美的解决方案,但至少比没有好。
已编辑:
另一种方法可能是依赖IDE本身。
E.g。在这个例子中:
void process()
{
auto myMap = createMap<std::string, int>();
SHOW_DEDUCT_TYPE(*myMap.begin())
for (auto it : myMap) {
}
}
开始输入&#34;它&#34; (没有引号)在for循环中。将弹出自动完成对话框,您应该看到&#34;它的类型&#34;自动完成框左侧的变量。如果类型太长,则将鼠标悬停在它上面并等待几秒钟 - 将显示完整类型(有时完整类型不显示,然后你必须按Ctrl + Space几次)。