在XCode"快速帮助"中显示变量类型

时间:2016-01-04 12:57:04

标签: c++ xcode ide

有没有办法让XCode在快速帮助中显示C ++变量类型?目前,当选择一个变量时,它只显示"声明为int foo.cc"。

在AppCode中,这适用于" auto"变量,因为它显示扣除的变量类型。

它适用于方法。

目前使用XCode 7.2。

1 个答案:

答案 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几次)。

enter image description here

enter image description here