在我的班上,我有一个成员:
std::vector<std::string> memory_;
现在我想要一个 fnc 返回内存的第一个元素中的内容,但我不想指定std::string
为返回类型,以防以后我决定为此目的使用不同的类型,所以我尝试了这个,但它没有工作:
typename decltype(memory_)::value_type call_mem()
{
return memory_[0];
}
任何想法如何以最通用的方式指定返回类型?
在我的班上,我有一个成员:
std::vector<std::string> memory_;
现在我想要一个 fnc 返回内存的第一个元素中的内容,但我不想指定std::string
为返回类型,以防以后我决定为此目的使用不同的类型,所以我尝试了这个,但它没有工作:
typename decltype(memory_)::value_type call_mem()
{
return memory_[0];
}
任何想法如何以最通用的方式指定返回类型?
只要您使用标准容器,那应该可以,我认为还可以。
或者,由于它是类的成员,因此您可以使用typedef
并公开该类value_type
的嵌套类型:
class demo
{
public:
typedef std::vector<std::string> container_type;
typedef container_type::value_type value_type;
value_type call_mem()
{
return *std::begin(memory_); //it is more generic!
}
private:
container_type memory_;
};
请注意,这*std::begin(memory_)
比两者都更通用,memory_[0]
并且*memory_.begin()
与它一样,即使数组也可以工作,但这不太可能使您在实际代码中受益。
您实际上只需要稍微更改格式,并使用auto
关键字:
auto call_mem() -> decltype(memory_)::value_type
{
return memory_[0];
}
实际上你可以只是decltype
整个表达式:
decltype(memory_[0]) call_mem()
{
return memory_[0];
}
但确保memory_
在之前声明call_mem
。(并用于std::begin
推广到@Nawaz解释的其他容器。)