我一直想要STL字符串中的更多功能。由于子类化STL类型是不可以的,因此大多数情况下,我已经看到推荐的这些类扩展方法只是编写将类型作为第一个参数的函数(而不是成员函数)。

我从未对这种解决方案感到兴奋。对于一个,在代码中所有这些方法都不一定很明显,对于另一个,我只是不喜欢语法。我要用。当我调用方法时!

前一段时间,我想到了以下内容:

class StringBox
{
public:
   StringBox( std::string& storage ) :
       _storage( storage )
   {
   }

   // Methods I wish std::string had...
   void Format();
   void Split();
   double ToDouble();
   void Join(); // etc...

private:
  StringBox();

  std::string& _storage;
};

请注意,StringBox需要对std::string进行构造的引用...这对它的使用设置了一些有趣的限制(我希望这意味着它不会导致字符串类扩散问题)...在我自己的代码中,我几乎总是只是在方法中在堆栈上声明它,只是为了修改std::string。

一个使用示例可能如下所示:
string OperateOnString( float num, string a, string b )
{
    string nameS;
    StringBox name( nameS );

    name.Format( "%f-%s-%s", num, a.c_str(), b.c_str() );

    return nameS;
}

我的问题是:StackOverflow社区的C++专家如何看待这种STL扩展方法?

最佳答案

由于我们大多数“专家”似乎都喜欢使用自由函数(可能包含在 namespace 中),因此可以肯定地说,您的解决方案将不会流行。恐怕我看不到它有一个优点,而且该类包含一个引用的事实也吸引了人们成为悬挂引用。

09-07 10:10