【发布时间】:2019-04-18 13:17:45
【问题描述】:
据我了解,可以write template specializations 用于 std 命名空间中的函数模板。我写了一个CircularBuffer<T> 类并为这个类实现了一个随机访问迭代器。 std::copy() 算法也适用于我的自定义迭代器,但它不是最优的。它遍历范围并一一复制元素。通过在内部指针上使用std::memcpy(),我可以为可复制的类型编写更优化的实现。
我的问题是这甚至可能吗?我知道如何创建std::copy() 的重载作为模板,输出迭代器是模板参数。但这无法做到,因为您只能在 std 命名空间中编写函数模板的模板特化。任何有助于为我指明正确方向的帮助都会有所帮助。从我可以通过 Google 收集到的信息来看,这是无法做到的,但我很想被证明是错误的 :)
【问题讨论】:
-
看来
CircularBuffer是模板,我们不能部分特化函数,所以唯一的解决办法就是重载……但是不能在命名空间std中添加。 -
我不会写任何函数specializations in new code。
-
@StoryTeller 它还声明只要涉及至少一种程序定义的类型就可以了。
-
@darune - 它还说 C++20 取消了对函数模板的允许,使其仅适用于 类模板。
-
澄清一下:您的
CircularBuffer::iterator是RandomAccessIterator 但不是ContiguousIterator,但是有连续的部分,类似于std::deque?
标签: c++ iterator template-specialization