Есть ли у stringstream (или boost) какая-нибудь функция умного формата?

0

Сегодня я пишу какой-то хобби-код для удовольствия, и, хотя я сделал кое-что, я пришел с чем-то интересным, что я хотел бы сделать так, как это звучит и выглядит красиво/отлично/круто.

Идея заключается в том, что у вас есть строка в C++, и вы передаете ее в строковый поток (для создания ss).

Затем ожидаемый формат <int or string> <string>, и вы получите правильный результат в соответствии с пользовательским вводом, например:

bool ExecuteSendPrivateMessage(int sender, std::string params)
{
    std::stringstream sparams(params);
    int_or_string receiverid;
    std::string message;

    sparams >> receiverid >> message;

    if (sparams.fail())
    {
        std::cout << "usage: /send_message_to <userid/username> <message>" << std::endl;
        return true;
    }
    if (int_or_string.HasString())
    {
        receiverid = GetUseridFromUsername(int_or_string.GetString());
    }
    SendMessage(receiverid.GetInt(), message);
    return true;
}

Возможно ли это в C++? Или с C++ в сочетании с Boost?

Предполагая, что у пользователя нет имени только с числовыми символами?

  • 0
    Что именно вы имеете в виду под «умным форматом» ?
  • 0
    сделать operator >> отличить от множества возможностей и присвоить правильное значение правильной переменной? как в примере :)
Показать ещё 2 комментария
Теги:
formatting
iostream

1 ответ

2
Лучший ответ

Это своего рода хакерский способ, но то, что я бы сделал, помещалось в stringstream, а затем пыталось прочитать в int из строкового потока. Если флаг сбоя sstream установлен, мы должны иметь строку, поэтому мы используем исходный идентификатор получателя.

Что-то вроде этого:

std::string recieverid;
std::stringstream srecieverid(recieverid);
int irecieverid;
srecieverid >> irecieverid;
if(srecieverid.fail()) {
   irecieverid = GetUseridFromUsername(recieverid);
}
SendMessage(irecieverid, message);

Это не самый чистый способ, но он работает.

  • 0
    Извините за имена вар.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню