在这种情况下如何使用decltype

Yve*_*ves 1 c++ using decltype

这是我的代码:

class Test
{
private:
    SomeType a;
public:
    using TE = decltype(a.find("abc")->second);
    TE getElement(const string &) const;
};

Test::TE Test::getElement(const string & key) const
{
    return a.find(key)->second;
}
Run Code Online (Sandbox Code Playgroud)

在类中,函数可以返回a如上所述的元素.类型a.find(key)->second非常复杂,所以我不想全部输入.事实上,我甚至不知道如何输入它...

所以我想像decltype上面一样使用但失败了.这是错误:

错误C2227:' - > second'的左边必须指向class/struct/union/generic类型

Bar*_*rry 5

您必须移动aup 的定义:

class Test
{
private:
    SomeType a;
public:
    using T = decltype(a.find("abc")->second);
    ...
};
Run Code Online (Sandbox Code Playgroud)

或者,a使用std::declval以下代码替换和表达正确的类型:

class Test
{
public:
    using T = decltype(std::declval<SomeType&>().find("abc")->second);
    ...
private:
    SomeType a;
};
Run Code Online (Sandbox Code Playgroud)

请注意,你在>这里错过了一个:

    return a.find(key)-second;
                     ^^^
Run Code Online (Sandbox Code Playgroud)

并且你的decltype()表达正在寻找一个const char[4]而不是一个std::string const &.所以最正确的版本是:

using T = decltype(std::declval<SomeType&>().find(
                       std::declval<std::string const&>()
                       )->second);
Run Code Online (Sandbox Code Playgroud)