c++ - 制作用户定义的类 std::to_string-able

标签 c++ string c++11 tostring

我知道 Java 或 C# 似乎太多了。但是,让我自己的类作为函数 std::to_string 的输入有效吗? 示例:

class my_class{
public:
std::string give_me_a_string_of_you() const{
    return "I am " + std::to_string(i);
}
int i;
};

void main(){
    my_class my_object;
    std::cout<< std::to_string(my_object);
}

如果没有这样的事情(我认为),最好的方法是什么?

最佳答案

什么是“最佳”方式是一个悬而未决的问题。

有几种方法。

首先要说的是,为自定义类型重载 std::to_string不允许的。我们只能在 std 命名空间中为自定义类型特化模板函数和类,而 std::to_string 不是模板函数。 p>

也就是说,处理 to_string 的好方法很像运算符或 swap 的实现。即允许依赖于参数的查找来完成这项工作。

因此,当我们想将某些内容转换为字符串时,我们可以编写:

using std::to_string;
auto s = to_string(x) + " : " + to_string(i);

假设 x 是命名空间 Y 中 X 类型的对象,而 i 是 int,那么我们可以定义:

namespace Y {

  std::string to_string(const X& x);

}

这意味着:

调用to_string(x)实际上选择Y::to_string(const Y::X&),并且

调用 to_string(i) 选择 std::to_string(int)

更进一步,你可能希望 to_string 与 operator<< 做很多相同的事情,所以一个可以写成另一个:

namespace Y {

  inline std::ostream& operator<<(std::ostream& os, const X& x) { /* implement here */; return os; }

  inline std::string to_string(const X& x) {
    std::ostringstream ss;
    ss << x;
    return ss.str();
  }
}

关于c++ - 制作用户定义的类 std::to_string-able,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399594/

相关文章:

c++ - 如何将用户输入与字符串进行比较?

java - 如何将数据从 c++ 发送到 java - android

Javascript 字符串长度未定义?

c++ - 如何调用一个函数而不在另一个 C++ 之前初始化它

C++11 - 模板、友元、decltype 和访问修饰符

c++ - binary_search 总是返回真 C++

c++ - 如何让 Visual Express 2010 找到我的 python.h 头文件?

javascript - 创建一个重复 x 次的字符串

java - 从列表中获取android中的string[]

c++ - 模板模板参数的模板特化