我一直希望 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 扩展方法?