1

関数から文字列を取得し、エラー コードを返したい関数があります。

int Connection::RecvMsg(std::string* buffer)
{
  buffer = &RecvBuffer.front();
  RecvBuffer.pop();
  return error_state; 
}

から文字列をポップしたいのですがRecvBuffer、パラメータを介して文字列を渡したいと思います。

ポップ後にバッファが無効になることに気付きました。その関数内で静的文字列を宣言する唯一の方法はありますか? 私がそれについて行くべき良い方法はありますか?

4

3 に答える 3

3

次のようなものがもっと欲しいと思うかもしれません:

*buffer = RecvBuffer.front();

bufferこれにより、文字列が指すものに割り当てられます。

于 2012-11-24T09:49:07.957 に答える
0

Outparameters は、複数のパラメーターをモデル化するための唯一の選択肢ではありません (IMO は最適ではありません)。代わりに、両方の値を a で返すことを提案しますpair

#include <utility>
#include <string>

std::pair<std::string,int> Connection::RecvMsg() {
  if (recvBuffer.empty()) {
    return std::make_pair<std::string,int>(std::string(),error_code);
  }
  std::string const front = recvBuffer.front();
  recvBuffer.pop();
  return std::make_pair<std::string,int>(front,no_error);
}
于 2012-11-24T10:21:28.390 に答える
0

C++ でエラーを伝播するための推奨される方法は、例外メカニズムを使用することです。

何らかの理由で例外を使用したくない場合は、参照を使用して呼び出し元に情報を返すことができます。

int Connection::RecvMsg(std::string &buffer)
{
    buffer = RecvBuffer.front();
    RecvBuffer.pop();
    return error_state; 
}

もちろん、ポインターも使用できますが、この場合、呼び出し元が nullptr を渡していないことを確認することをお勧めします。だから、あなたはこのようなものを書く必要があります

int Connection::RecvMsg(std::string *buffer)
{
    error_state = false;

    if(buffer != nullptr)
    {
        *buffer = RecvBuffer.front();
        RecvBuffer.pop();
        error_state = true;
    }

    return error_state; 
}
于 2012-11-24T09:54:37.770 に答える