c++多个接口(interface)到同一功能模板

标签 c++ c++11 overloading

我有几种方法可以处理我通常保存在 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/

相关文章:

c++ - 想知道为什么我不能只为协程捕获 asio::handler_type 的引用

c++ - 空检查空对象模式

c++ - 为什么你不能从一个元组中分配一个对,但元组可以从一个对中分配?

c++ - 如何测试 std::thread 是否被移出?

c++ - 是否需要重写一个以基类为参数的虚函数?

c++线程池:用于将函数/lambdas传递给线程的std::function的替代方法?

c++ - 我可以强制 C++ 库使用单线程吗?

visual-c++ - Visual Studio 2013 std::mutex 和可怕的 Windows 加载器锁

java - 在 Java 中重载和覆盖

julia - Julia 中的函数重载 - 关键字参数