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

rub*_*nvb -1 c++ string inheritance c++11

当然,std::string界面已经膨胀.但它缺少一些(对我而言)关键因素.例如,a std::wstring不能从plain构造const char*(这是从字符串文字创建一个所需的).我还想添加一个 operator/和一个split函数.无论如何,这就是问题的重点.这阻碍了我为项目编写核心类的内容.

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

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

请不要说"不要这样做",除非你能提供一种方法:1)做我想要的,2)不要求我自己写,3)不要膨胀我的来电者界面.

Die*_*ühl 11

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

template <typename cT>
std::basic_string<cT> construct(char const* str) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

同样的split(),operator/()等等.原则上,大多数成员std::basic_string<...>不应该摆在首位会员...

  • 我不明白为什么`vector <string>形式的自由函数split(字符串const&text,const char*separator)`会"膨胀你的调用者端接口",而不仅仅是假设的新`string`成员.你已经被告知如何从`const char*`构建`wstring`(即"不要"). (2认同)