Сегодня я пишу какой-то хобби-код для удовольствия, и, хотя я сделал кое-что, я пришел с чем-то интересным, что я хотел бы сделать так, как это звучит и выглядит красиво/отлично/круто.
Идея заключается в том, что у вас есть строка в 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?
Предполагая, что у пользователя нет имени только с числовыми символами?
Это своего рода хакерский способ, но то, что я бы сделал, помещалось в stringstream, а затем пыталось прочитать в int из строкового потока. Если флаг сбоя sstream установлен, мы должны иметь строку, поэтому мы используем исходный идентификатор получателя.
Что-то вроде этого:
std::string recieverid;
std::stringstream srecieverid(recieverid);
int irecieverid;
srecieverid >> irecieverid;
if(srecieverid.fail()) {
irecieverid = GetUseridFromUsername(recieverid);
}
SendMessage(irecieverid, message);
Это не самый чистый способ, но он работает.
operator >>
отличить от множества возможностей и присвоить правильное значение правильной переменной? как в примере :)