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类型
您必须移动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)