相关疑难解决方法(0)

确定(c ++)迭代器是否是反向的

我想要一种机制来在编译时确定迭代器是否是反向的.

迭代器特性只能帮助迭代器类型的类别,我需要的是以下几行:

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)

c++ templates

0
推荐指数
1
解决办法
448
查看次数

标签 统计

c++ ×1

templates ×1