【发布时间】:2017-04-13 20:11:55
【问题描述】:
我刚刚知道 C++ 在<string> 中定义了一个std::to_string()。现在我想知道为什么to_string() 只适用于数字类型。有没有什么特别的原因,为什么没有更笼统的
template <typename T>
std::string to_string(const T& t);
?
可以这样实现:
template <typename T>
std::string to_string(const T& t) {
std::ostringstream s;
s << t;
return s.str();
}
我怀疑这种通用的to_string不存在,因为你自己写很容易,但是同样的论点也适用于to_string()取int,double等。
【问题讨论】:
-
只是我的两分钱...但是这些功能太有限了,不值得在 std... 像 Boost.Format 或 lexical_cast 这样的东西会很多,我的意思是很多更有用。这些 to_string 函数非常基础,仅在最基本的场景中有用,这意味着它们在现实生活中毫无用处。
-
不要被一票否决。可能只是一个人度过了糟糕的一天。
-
其实有一个关于这个问题的提案open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0117r0.html,但不认为有时间会被接受
-
@DAle 你为什么不认为它会被接受?恕我直言,我每次都必须手动创建一个流,这是一个主要的烦恼,它可以很容易地修复
-
@DAle “对标准的影响”部分提到了提供更通用功能会出现问题的一个很好的理由。可惜
to_string()现在已经成为标准