通过添加构造函数和一些成员函数来扩展 std::(w)字符串

Extending std::(w)string, by adding a constructor and some member functions

本文关键字:std 扩展 字符串 函数 构造函数 添加 成员      更新时间:2023-10-16

当然,std::string界面已经很臃肿了。但它缺少一些(对我来说)关键元素。例如,不能从纯const char*构造std::wstring(这是从字符串文本创建所需的)。我还想添加一个operator/和一个split函数。无论如何,这都不是问题的重点。这阻止了我为项目编写核心类的胆量。

我知道我可以私下继承std::(w)string,并"导入"所有成员using。这错过了关键的非成员模板函数,这些函数很多。

我怎样才能更好地解决这个问题?我知道公共继承"解决"了这个问题,但它引入了在没有虚拟析构函数的情况下delete类的基类指针的问题。请注意,我不打算添加数据成员,所以这真的是一个问题,还是这个极端情况仍然可以使用公共继承?

请不要说"不要这样做",除非你能提供一种方法:1)做我想做的事,2)不需要我自己写,3)不会膨胀我的调用方界面。

不要从std::basic_string<...>派生,而是创建执行适当操作的算法,例如:

template <typename cT>
std::basic_string<cT> construct(char const* str) {
// ...
}

同样适用于split()operator/()等。原则上,std::basic_string<...>的大多数成员首先不应该是成员......