首页 > 解决方案 > 围绕 std::string 和 std::string_view 构建一个包装类

问题描述

我有一个 C++ 应用程序,它具有多年开发的深度、精致的逻辑。遗憾的是,它结合了各种不同类型的字符串:std::string、C 字符串、Pascal 字符串和操作系统/平台特定的字符串。此外,这些字符串类型中的每一种都经常使用各种编码。

我创建了一个包装类 WBString,它包含一个 std::string,并且可以从我预先存在的近十种字符串中构造。

但是,我希望底层实现能够使用 std::string_view。如果我从已经是 const 的源字符串构造,则在初始化和传递我的类时,std::string_view 可以节省所有形式的幕后构造。

看起来好像 C++17 的 std::string_view 可以简单地尝试与 std::string 更好地集成,但我想这可能会破坏现有的应用程序。

我可以看到很多这样做的方法:

1) 将我的 WBString 类模板化以保存一个 std::string 用于非常量函数和一个单独的 WBStringView 用于 const 字符串;

2)创建一个没有数据的基类和两个独立的继承类:WBString / WBStringView;

3) 有一个包含 std::string 和 std::string_view 作为数据成员的类;

4) 保留一个可以是任一类型的 void* 数据成员。

以前有人必须面对这个问题吗?

标签: c++c++17string-view

解决方案


推荐阅读