我有几种方法可以处理我通常保存在 std::string 中的 utf8 编码字符串。
在相同的情况下,虽然我只是对数据使用 const char*,或者数据是更大字符串的一部分,但我不想创建子字符串。
所有的功能归结为一个通用的方法说:
void foo(int a, int b, const char* beginStr, const char* endStr);
现在如果我想避免一些丑陋,我会创造
void foo(int a, int b, const char* beginStr, const char* endStr);
void foo(int a, int b, const char* str);
void foo(int a, int b, const std::string% str);
在某些情况下甚至:
void foo(int a, int b, const std::string::const_iterator& beginStr
const std::string::const_iterator& endStr);
这看起来不错,但正如我提到的,我有几种方法,维护所有这些风格真的很烦人。
我正在寻找的是一些可以消除对每个接口(interface)进行倍增的需求的魔法。 c++11 的一些特性能否在不影响性能的情况下帮助解决这个问题——让它不那么啰嗦?
最佳答案
如评论中所述,作为 basic_string_view
的包装器可能会解决一部分问题。
可变参数模板可能会解决另一部分(不要显式 basic_string_view
):
void foo_impl(int a, int b, const basic_string_view& str); // the real implementation
template <typename ... Ts>
void foo(int a, int b, Ts&&... args) {
foo_impl(a, b, basic_string_view{std::forward(args...)});
}
关于c++多个接口(interface)到同一功能模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552549/