gpt4 book ai didi

C++ 重载运算符 << 用于 std::string

转载 作者:太空狗 更新时间:2023-10-29 23:46:52 33 4
gpt4 key购买 nike

我刚刚看到另一个朴素的 C++ 代码使用 sprintf 将 C 内置函数附加到字符数组中,我想足够了。

我可以帮助为 std::string 提供简单、轻量级、追加和非格式化功能,但由于它将被 checkin 团队的通用代码,我希望它是完美的,所以我需要一些建议 < b>在此功能的界面上(即不在实际实现上)。

以下可能是可能的(我没有测试,这只是一种预感):

  1. 重载“+= ”运算符(可能在 std 或 global 之外的另一个 namespace 中)
  2. 重载“<<”运算符(同样,在另一个命名空间中)
  3. 提供非运算符非成员函数(我想,还是在另一个命名空间中)
  4. 另一个我没有看到的简单解决方案?

每种解决方案的优缺点是什么(我更喜欢“+=”,甚至是“<<”)?

注意事项

  • 重点不在于格式化。如果有人想要格式化,C++ 流很适合。我只想要简单、轻量级的一个语句/函数调用附加。
  • 使用另一个命名空间是因为我们无权向 std 命名空间添加代码,而且我不想污染全局命名空间,所以,是的,我猜用户必须添加一个 using namespace SomeNamespace ; 作为它为 <utility>rel_ops 命名空间完成)
  • 我正在使用 std::string which is not able, natively, to handle other types than itself, char and char * 。我想扩展它以处理其他简单类型。
  • 在代码方面(声明流、附加、然后检索 .str() 以将其放入字符串等)使用过多的字符串流权重,以及我想要的最后一件事是一个语法加糖的内联函数,在每次调用时实例化一个字符串流)。正如您在下面的示例中看到的,stringstream 解决方案过于冗长:

.

// sprintf-like code with a char[] buffer:
sprintf(buffer, "%d", myDouble) ;

// stream-like code with a std::string buffer:
std::stringstream str ;
str << myDouble ;
buffer = str.str() ;

// example of desired code with a std::string buffer:
buffer += myDouble ;

最佳答案

我会使用 ostringstreamstream manipulators替换 sprintf。不值得reinventing the wheel .

关于C++ 重载运算符 << 用于 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559467/

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