【发布时间】:2014-11-30 22:59:11
【问题描述】:
我想交换由迭代器指向的 2 个值。所以我想专门化模板函数来获取迭代器。请告诉我,我该怎么做?
非迭代器的功能:
template <typename T>
void exch(T &a, T &b)
{
T c( std::move(a) );
a = std::move(b);
b = std::move(c);
}
迭代器的功能:
template <typename It>
void exch(It &a, It &b)
{
auto c( std::move(*a) );
*a = std::move(*b);
*b = std::move(c);
}
当然,有 2 个函数我得到一个错误:
/projects/DFSTL/main.cpp:17:6: 错误:'template void exch(It&, It&)'的重新定义
【问题讨论】:
-
SFINAE 或
is_iterator特征上的标签调度,其实现可以很容易地在 SO 上找到。但是你确定你真的想这样做吗?如果有人真的想交换迭代器怎么办? -
你可以使用
std::iter_swap()。