我现在刚刚看到另一个简单的 C++ 代码使用 sprintf 将 C 内置函数附加到字符数组中,我想足够了。
我可以帮助提供简单、轻量级、附加和非格式化功能std::string
,但由于它将被签入团队的通用代码中,我希望它是完美的,所以我需要一些建议在界面上此功能(即不在实际实现中)。
以下可能是可能的(我没有测试它,这只是一种预感):
- 超载“
+=
" 运算符(可能位于 std 或 global 之外的另一个命名空间中)
- 超载“
<<
“ 运算符(同样,在另一个命名空间中)
- 提供非运算符非成员函数(我猜,又是在另一个命名空间中)
- 我没有看到另一个简单的解决方案?
每种解决方案的优点和缺点是什么(我更喜欢“+=
“, 甚至 ”<<
") ?
Notes
- 重点不在于格式化。如果有人想要格式化,C++ 流很适合。我只想要简单、轻量级、一条语句/函数调用附加。
- 使用另一个命名空间是因为我们无权向 std 命名空间添加代码,并且我不想污染全局命名空间,所以,是的,我想用户必须添加一个
using namespace SomeNamespace ;
正如它所做的那样<utility>
's rel_ops http://www.cplusplus.com/reference/std/utility/rel_ops/命名空间)
- 我在用着
std::string
它本身无法处理除自身之外的其他类型,char and char * http://www.cplusplus.com/reference/string/string/operator+=/。我想扩展它来处理其他简单类型。
- 使用字符串流在代码方面的权重太大(声明流,附加,然后检索
.str()
将其放入字符串等中),我最不想要的是一个语法糖内联函数,在每次调用时实例化一个字符串流)。正如您在下面的示例中看到的,stringstream 解决方案是太冗长:
我会用ostringstream http://www.cplusplus.com/reference/iostream/ostringstream/ and 流操纵器 http://www.cplusplus.com/reference/iostream/manipulators/取代sprintf
。这不值得重新发明轮子 http://en.wikipedia.org/wiki/Reinventing_the_wheel.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)