字符串流(或boost)是否具有某种智能格式功能

Does stringstream (or boost) have some smart format feature?

本文关键字:智能 功能 格式 是否 boost 字符串      更新时间:2023-10-16

我今天写一些业余代码是为了好玩,在做一些事情的同时,我发现了一些有趣的事情,我想以一种听起来和看起来都很好/很棒/很酷的方式来做。

这个想法基本上是在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?

假设没有用户的名称只有数字字符?

这是一种很有技巧的方法,但我要做的是将receiverid放入字符串流中,然后尝试从字符串流中读取int。如果设置了sstream的失败标志,那么我们必须有一个字符串,所以我们使用初始接收器id。

类似这样的东西:

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

这并不是最干净的方法,但它确实有效。