如何在字符串中包含整数?

时间:2011-12-02 22:23:08

标签: c++ string

如果系统调用失败,我想抛出一个包含与失败相关的'errno'的异常。现在,我用这个:

if (bind(...) == -1) {
   std::stringstream s;
   s << "Error:" << errno << " during bind";
   throw std::runtime_error(s.str());
}

这看起来很笨拙。我不能直接将一个整数附加到std :: string() - 这是什么最好的解决方案? Java有String()。append(int),但std :: string中没有这样的工具。为此,每个人都围绕std :: string写一个包装器吗?

3 个答案:

答案 0 :(得分:3)

在这种情况下,

boost::lexical_cast非常有用:

throw std::runtime_error("Error:" + boost::lexical_cast<std::string>(errno) + " during bind");

答案 1 :(得分:3)

我喜欢使用boost::format

std::string msg = boost::str( boost::format("Error: %1% during bind") % errno );
throw std::runtime_error(msg);

有一点需要注意的是,如果catch块中有bad_alloc,则可能会隐藏上一个错误。据我所知,boost::format使用分配,因此可能会受此影响。你没有赶上这里,所以它并不完全适用。但是,通过错误处理可以了解这一点。

答案 2 :(得分:2)

你可以写自己的:

以下是一些提示:

class Exception{
public:
    Exception(const char* sourceFile, const char* sourceFunction, int sourceLine, Type type, const char* info = 0, ...);
protected:
    const char *mSourceFile;
    const char *mSourceFunction;
    int mSourceLine;
    Type mType;
    char mInfo[2048];
};

类型可以是:

enum Type
{
    UNSPECIFIED_ERROR,              //! Error cause unspecified.
    .. other types of error...  
};

所以你可以用通常的格式传递字符串..例如

Exception(__FILE__, __FUNCTION__, __LINE__, Type::UNSPECIFIED_ERROR, "Error %d", myInt);