灵活组成字符串的简洁方法?

tim*_*els 1 c++

什么是灵活组成字符串的简洁方法?我不想使用宏.

例如,我可能想要将int转换为十六进制格式的字符串,填充宽度为10个字符,连接到字符串,另一个数字,...

基本上,我想要ostringstream/printf的灵活性,但需要一行代码.

Jas*_*n R 6

我以前用过这样的东西:

#include <sstream>

class make_string
{
public:
    make_string() { }

    template <typename T>
    explicit make_string(T && rhs)
    {
        oss << rhs;
    }

    template <typename T>
    make_string &operator<<(T && rhs)
    {
        oss << rhs;
        return *this;
    }

    operator std::string() const
    {
        return oss.str();
    }

    std::string str() const
    {
        return oss.str();
    }

private:
    std::ostringstream oss;
};
Run Code Online (Sandbox Code Playgroud)

用法是这样的:

string s = make_string() << "Hello, world" << '!' << 42 << 1.0;
Run Code Online (Sandbox Code Playgroud)

或者像这样:

string s = make_string(4.0);
Run Code Online (Sandbox Code Playgroud)

如果您愿意,它可以灵活地在一个表达式中流式传输多个对象,或者如果您需要,可以立即转换单个类型.它将隐式转换为a std::string,因此您可以将其直接分配给一个.它需要的是你的类型T有一个std::ostream对象的流插入操作符.

或者(如上面的评论者所建议的),如果您已经在项目中使用Boost,那么这boost::lexical_cast()是另一个潜在的选择.您应该查看其界面并选择您最喜欢的界面.