向字符串类添加函数

2023-12-21

我知道从 std::string 类继承是一个糟糕的主意,但只是尝试使用继承向 string 类添加自定义函数以进行虚拟分配。 我想将我的函数称为“add”,当我执行 str.add(str1,str2); 时它应该在字符串的开头附加 str1,在字符串的末尾附加 str2。这个类(继承的字符串类)是另一个类(比如Parent)的私有成员类。当我尝试用它访问我的字符串类对象时,它指向父类。我怎样才能做到这一点?

Thanks


我不确定我是否理解你问题的所有方面。当你说私有成员类时,你的意思是私有成员变量吗?还是私人继承?我不明白“当我尝试用它访问我的字符串类对象时,它指向父类”。

你是对的,从 std::string 继承可能不是一个好主意。首先,使其成为派生字符串的成员需要您对底层实现有相当多的了解;这可能会因发行版而异,从而导致代码不可移植。如果您确实使用 std::string 提供的已定义接口编写了可移植的实现,那么您将无法利用任何真正的优化。除非你有充分的理由这样做,否则你最好根本不这样做。

其次,“add”这个名字可能不是最好的,因为它似乎没有描述你正在做的事情。 “环绕”可能是一个更好的名字。

我认为像这样的外部函数可能会更好,避免从字符串继承的整个想法:

void surround(std::string &orig, std::string const &pre, std::string const &post) {
    orig = pre + orig + post;
}

或者,如果您想要更高的性能,请执行以下操作:

void surround(std::string &orig, std::string const &pre, std::string const &post) {
    std::string str;
    str.reserve(orig.size() + pre.size() + post.size());
    str.insert(str.end(), pre.begin(), pre.end());
    str.insert(str.end(), orig.begin(), orig.end());
    str.insert(str.end(), post.begin(), post.end());
    std::swap(str, orig);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向字符串类添加函数 的相关文章

随机推荐

  • 你调用的对象是空的

    当我在 NUnit 中运行这个程序时 出现错误 你调用的对象是空的 虽然这不是原始程序 但我也遇到了类似的错误 任何帮助表示赞赏 异常发生于 driver Navigate GoToUrl http www yahoo com 程序 usi
  • 逐行将 .txt 读取到批处理变量中

    我有一个批处理脚本 可以将 ping 发送到某些 PC 可用的 PC 被写入文本文件中 因此每台 PC 都站在自己的行中 另一个批处理脚本将一些文件复制到 PC 目前它尝试复制到所有 PC 现在我想修改脚本 以便批处理读出文本文件并仅复制到
  • 图结构中拥有的指针

    在 Rust 社区的慷慨帮助下 我成功地获得了使用托管指针组装的拓扑数据结构的基础 这一切结合得相当好 总的来说我对 Rust 非常兴奋 然后我读了这个post http pcwalton github io blog 2013 06 02
  • reflog 过期并 gc prune 后推送到原点

    我使用以下命令删除了本地存储库中的一些无法访问和悬空的提交 git fsck unreachable dangling no reflogs git reflog expire expire now all git gc prune now
  • 如何使用react js在Fetch API中设置超时

    我在 React js 中使用 fetch post 方法 当向后端发送请求时 需要 7 分钟才能提供响应 然后前端会自动超时 你能帮我解决一下如何在 fetch 方法中设置 10 分钟的时间 让前端等待响应 并且只有当后端花费超过 10
  • 前缀/后缀增量运算符

    我想确保我正确理解按值传递与按引用传递 特别是 我正在查看增量的前缀 后缀版本 对象的运算符 假设我们有以下课程X class X private int i public X i 0 X operator i return this pr
  • 单选按钮在 Chrome 中显示不需要的白色背景。火狐浏览器没问题

    在 Google Chrome 中 单选按钮会在圆圈周围显示不需要的白色背景 这在 Firefox 中并未按预期显示 Please check these images 她是有问题的页面的直接链接 在 Firefox 和 Chrome 中检
  • 是否存在 setfable nthcdr 实现?

    我正在使用 clisp 我想知道是否有任何带有可设置版本的 nthcdr 的库可供我使用 你可以用以下方法解决它 let lst list 1 2 3 4 n 2 setf cdr nthcdr 1 n lst 5 6 7 l gt 1 2
  • 改装 400 错误请求

    这是我用于网络调用的函数 private void getSample Log d getSample OkHttpClient client new OkHttpClient HttpLoggingInterceptor intercep
  • 如何从批处理脚本检查Java安装?

    我需要编写一个批处理脚本来查找是否安装了Java 如果安装了 那么在什么路径下 我觉得它必须是类似这样的 for f j in java exe do set JAVA HOME 但我不明白 附 它必须与带有空格两个的路径一起使用 就像ja
  • Haskell主要函数

    module Main where qsort Ord a gt a gt a qsort qsort x xs qsort smaller x qsort larger where smaller a a lt xs a lt x lar
  • 使用 Android SIP 堆栈进行点对点 SIP 呼叫?

    我一直在寻找一种方法来设置 Android SIP 堆栈 以便能够以临时方式在同一网络上的两个设备之间建立 SIP 呼叫 即无需注册到 SIP 服务器 我无法让它工作 因为 SIP 演示包括服务器注册 如果没有此步骤 我无法让它拨打或接听电
  • python中的全局计数器线程安全吗?

    import threading import time counter 0 def increase name global counter i 0 while i lt 30 this for loop is for consuming
  • 具有固定参数值的路由的别名

    我有这条路线 Route get MyModel id MyController show 方法show 接受一个名为id我想设置一个别名 MyModel 1所以可以从 MyCustomURL 我已经尝试了一些组合 例如 Route get
  • 获取 powershell 显示驱动器上可以找到某个文件的所有路径

    我正在尝试构建一个函数 该函数将显示某个文件名所在的所有路径 该函数将采用一个参数 即文件名 结果要么是所有路径的列表 要么是一条消息说系统上没有这样的文件 我是 Powershell 新手 目前还没有掌握语法 我试过这个 Get Chil
  • 键盘不适用于 uiactionsheet 中的文本字段

    我在 uiactionsheet 中添加了 textfeld 作为 void showAction printf getting action ready n UIActionSheet asheet UIActionSheet alloc
  • Prolog - 递归地将数字附加到列表中

    我刚刚开始学习 Prolog 并且在理解递归概念时遇到了麻烦 现在 仅出于练习目的 我正在尝试编写一个程序 将 10 个数字附加到列表中 然后打印出该列表 这个程序的自我强加的规则是列表必须在主谓词中 声明 我不确定这对于 Prolog 来
  • 我可以使用正则表达式和 pandas 在两个数据帧之间执行左连接/合并吗?

    我正在尝试使用 Python 中的正则表达式执行左合并 该正则表达式可以处理多对多关系 例子 df1 pd DataFrame a b c d columns col1 df1 regex df1 col1 col1 regex 0 a a
  • LinqToSql 查询中的条件快捷方式

    这是一个 LinqToSql 的小陷阱 Returns the number of counties in a state or all counties in the USA if the state is null public sta
  • 向字符串类添加函数

    我知道从 std string 类继承是一个糟糕的主意 但只是尝试使用继承向 string 类添加自定义函数以进行虚拟分配 我想将我的函数称为 add 当我执行 str add str1 str2 时它应该在字符串的开头附加 str1 在字