如何在 C++ 中从任何类型转换为 std::string

Sha*_*rry 0 c++ templates tostring data-structures

我正在使用模板创建一个 LinkedList 类,因为我想将它用于以后需要的任何类型

template <typename T> class LinkedList {}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个将列表的所有元素添加到字符串中的函数:

std::string join(const char *seperator)
{
    std::string str;
    auto curr = this->head;
    while (curr)
    {
        str += std::to_string(curr->value);
        if (curr->next)
            str += seperator;
        curr = curr->next;
    }
    return str;
}
Run Code Online (Sandbox Code Playgroud)

它适用于我测试的类型(int、double、float...),但不适用于 std::string,该to_string()函数会生成错误

错误 C2665 'std::to_string':9 个重载中没有一个可以转换所有参数类型

我认为它不适用于其他类型。那么,您能否提供一种从任何类型转换为 std::string 的通用方法。

And*_*hev 8

在 C++ 中,没有通用的方法可以将任意类型的对象转换为字符串。但最常用的将数据输出为字符串的工具是输出流。所以,你可以std::ostringstream这样使用:

std::string join(const char *seperator)
{
    std::ostringstream strm;
    auto curr = this->head;
    while (curr)
    {
        strm << curr->value;
        if (curr->next)
            strm << seperator;
        curr = curr->next;
    }
    return strm.str();
}
Run Code Online (Sandbox Code Playgroud)

请注意,要使其正常工作,类型T应该提供一个作为第一个参数的operator<<重载。此工具支持std::ostream&所有算术类型、C 样式字符串和,但并非所有用户定义类型。std::string