我知道 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/