6

在我的班上,我有一个成员:

std::vector<std::string> memory_;

现在我想要一个 fnc 返回内存的第一个元素中的内容,但我不想指定std::string为返回类型,以防以后我决定为此目的使用不同的类型,所以我尝试了这个,但它没有工作:

typename decltype(memory_)::value_type call_mem()
{
    return memory_[0];
}

任何想法如何以最通用的方式指定返回类型?

4

3 回答 3

4

只要您使用标准容器,那应该可以,我认为还可以。

或者,由于它是类的成员,因此您可以使用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()与它一样,即使数组也可以工作,但这不太可能使您在实际代码中受益。

于 2011-11-17T09:18:54.153 回答
1

您实际上只需要稍微更改格式,并使用auto关键字:

auto call_mem() -> decltype(memory_)::value_type
{
    return memory_[0];
}
于 2011-11-17T19:06:00.780 回答
0

实际上你可以只是decltype整个表达式:

decltype(memory_[0]) call_mem()
{
    return memory_[0];
}

但确保memory_在之前声明call_mem。(并用于std::begin推广到@Nawaz解释的其他容器。)

于 2011-11-17T18:41:21.963 回答