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ください。(そして@Nawazstd::beginで説明されているように、他のコンテナーに一般化するために使用します。)

于 2011-11-17T18:41:21.963 に答える