gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:50:37 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com