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

时间:2014-01-03 21:18:11

标签: c++ string inheritance c++11

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

我知道我可以私下继承std::(w)string,并使用using“导入”所有成员。这错过了许多重要的非成员模板功能。

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

请不要说“不要这样做”,除非你能提供1)做我想要的方式,2)不需要我自己写的全部,3)不会让我的来电膨胀 - 界面。

1 个答案:

答案 0 :(得分:11)

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

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

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