当然,std::string
界面已经膨胀。但它缺少一些(对我而言)关键因素。例如,std::wstring
不能从普通const char*
构造(这是从字符串文字创建一个所需的)。我还想添加operator/
和split
功能。无论如何,这就是问题的重点。这阻碍了我为一个项目编写核心类的内容。
我知道我可以私下继承std::(w)string
,并使用using
“导入”所有成员。这错过了许多重要的非成员模板功能。
我怎样才能更好地接近这个?我知道公共继承“解决”了这个问题,但是它引入了delete
没有虚析构函数的类的基类指针的问题。请注意,我不打算添加数据成员,所以这真的是一个问题,还是这个角落的案例仍然可以使用公共继承?
请不要说“不要这样做”,除非你能提供1)做我想要的方式,2)不需要我自己写的全部,3)不会让我的来电膨胀 - 界面。
答案 0 :(得分:11)
不要从std::basic_string<...>
派生,而是创建执行适当操作的算法,例如:
template <typename cT>
std::basic_string<cT> construct(char const* str) {
// ...
}
同样适用于split()
,operator/()
等。原则上,std::basic_string<...>
的大多数成员不应该首先成为成员......