在这种情况下如何使用 decltype

How to use decltype in this case

这是我的代码:

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;
}

在class中,一个函数可以return一个a的元素,就像上面那样。 a.find(key)->second 的类型很复杂,所以我不想全部输入。其实我连打字都不知道...

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

error C2227: left of '->second' must point to class/struct/union/generic type

您必须将 a 的定义向上移动:

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

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

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

请注意,您在这里遗漏了 >

    return a.find(key)-second;
                     ^^^

并且您的 decltype() 表达式正在查找 const char[4] 而不是 std::string const &。所以最正确的版本是:

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