【问题标题】:Creating Custom Functions for Strings in C++在 C++ 中为字符串创建自定义函数
【发布时间】:2016-02-14 18:48:47
【问题描述】:

我现在才使用 c++ 大约一个月,我想知道是否可以为字符串之类的东西创建自己的自定义函数。 例如,要查找字符串的大小,您可以使用 stringname.size() 但如果我想创建像 stringname.customfunction() 这样的函数,我可以决定 customfunction() 做什么。我想这样做,这样我就可以创建一个 .toLower() 函数,将整个字符串转换为较低的字符串。如果这是一个奇怪的问题,我很抱歉,但我们将不胜感激。

【问题讨论】:

    标签: c++ function class


    【解决方案1】:

    这可能有点高级和高度鄙视,但您可以更改实际的源文件。我强烈建议您不要这样做。

    您应该只创建一个简单的函数void toLower(std::string str); 来为您转换它。 (您可以使用toLower(str); 调用此函数。)

    【讨论】:

      【解决方案2】:

      你不能直接但你应该能够通过继承std::string(或basic_string<char>)来模拟这个:

      class mystring : public std::string
      {
      public:
          void customfunction() { /* ... */ }
      };
      

      注意:但是这样做是个坏主意。除了 @Cheers and hth. - Alf 提到的 link 之外,Herb Sutter 还讨论了过度的 wide interface of std::string 并进一步扩大它是一个坏主意。

      【讨论】:

      • −1std::string 派生以增强其已经臃肿的界面被广泛认为是Bad Practice™。正确地进行这种推导并非易事,例如需要正确地构造构造函数(现在使用构造函数继承更容易,但仍然如此),而一个简单的支持函数是微不足道的。我通常只会对技术上不正确的答案投反对票,但这对初学者来说确实是个糟糕的建议。
      • SO 在这里有一段时间很慢,但这里有一个指向更多信息的链接:(stackoverflow.com/questions/6006860/…)。被接受和大力支持的答案是不好的——在 SO 上并不少见——但也有很好的观点。
      • 我并没有说这是最佳实践——我只是将其作为一种实现方式。在我工作的地方,我们有 6 个不同的弦乐课程,其中两个是本土的。我将更新答案以说明这是一个坏主意。
      【解决方案3】:

      您可以通过创建自己的字符串类来实现这一点,但正如我所理解的,您的意思是调用类似 "THE String".toLower() 的东西,例如在 python 中。据我所知,这在 c++ 中实际上是不可能的。

      再一次,你最好的机会是自己上课,这样你就可以打电话给MyString("THE String").toLower()。或者只是创建一个函数 toLower 接受一个字符串并返回一个字符串toLower("THE String")

      【讨论】:

        【解决方案4】:

        是的,您可以创建自定义函数,但不能直接作为现有类的成员函数。

        最简单也是最好的方法就是创建独立的函数。

        这意味着您可以将其称为customfunction( s )

        【讨论】:

        • 所以首选的方法是 customfunction(string a),而不是 stringname.customfunction()。好吧,我想我现在明白了。
        猜你喜欢
        • 2014-12-03
        • 1970-01-01
        • 2022-11-23
        • 2014-06-13
        • 2017-11-05
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        相关资源
        最近更新 更多