Возврат из параметра и области

У меня есть функция, где я хотел бы получить строку из функции и вернуть код ошибки:

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

Я хочу вытолкнуть строку из RecvBufferи я хотел бы передать строку через параметр.

Я понял, что буфер будет недействительным после pop. Является ли единственный способ объявить статическую строку внутри этой функции? Есть ли лучшие способы, которыми я должен идти об этом?

1

Решение

Я думаю, что вы могли бы хотеть что-то вроде этого

*buffer = RecvBuffer.front();

Это назначит строку любому buffer указывает на.

3

Другие решения

Рекомендуемый способ распространения ошибок в 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;
}
0

Outparameters не единственный (и IMO не лучший) выбор для моделирования нескольких параметров. Вместо этого я бы предложил вернуть оба значения в 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);
}
0
По вопросам рекламы [email protected]