我想要一种机制来在编译时确定迭代器是否是反向的.
迭代器特性只能帮助迭代器类型的类别,我需要的是以下几行:
template<typename IterType>
struct IsReverseIterator
{
enum { Yes = /* Implementation of the mechanism */ };
}
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,虽然有一个小缺点,但也必须提供容器类型:
typedef char TrueT;
typedef struct { TrueT _[2]; } FalseT;
template<typename Cont> TrueT IsReverseIterator(typename Cont::const_reverse_iterator);
template<typename Cont> FalseT IsReverseIterator(...);
Run Code Online (Sandbox Code Playgroud)
它明显使用SFINAE,可以这样使用:
std::vector<int> v;
std::cout << (sizeof(IsReverseIterator<std::vector<int>>(v.begin())) == sizeof(TrueT)) << std::endl;
std::cout << (sizeof(IsReverseIterator<std::vector<int>>(v.rbegin())) == sizeof(TrueT)) << std::endl;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
要解释我正在搜索的内容,请参考以下代码
template<typename Cont, typename It>
bool points_to_last_element(Cont const &container, It iter)
{
return iter == container.rend(); …Run Code Online (Sandbox Code Playgroud)