这是我的代码:
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;
}
在类中,函数可以像上面一样返回a
的元素。 a.find(key)->second
的类型非常复杂,所以我不想全部输入。事实上,我甚至不知道如何打字......
所以我想像上面那样使用decltype
但是失败了。这是错误:
错误C2227:' - > second'的左边必须指向class / struct / union / generic type
答案 0 :(得分:5)
您必须向上移动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);