我希望熟悉boost.iterator_facade实现的人可以阐明为什么选择writable_postfix_increment_proxy
或postfix_increment_proxy
时使用以下元函数。
template <class Reference, class Value>
struct is_non_proxy_reference
: is_convertible<
typename remove_reference<Reference>::type
const volatile*
, Value const volatile*
>
{};
可以在here中找到它,并用在元函数postfix_increment_result中,该元函数选择后缀运算符应返回代理还是仅返回迭代器。 postfix_increment_result
的其余部分似乎很清楚。像..
如果iter :: reference是可读的,并且类别基本上与input_iterator_tag或output_iterator_tag等效,则返回代理。
但是我对is_non_proxy_reference
感到困惑,在true
与Reference
相同而忽略了简历限定词的情况下,它似乎是Value
。在这种情况下,将使用postfix_increment_proxy<Iterator>
和其他writable_postfix_increment_proxy<Iterator>
。
Reference
何时将与Value
成为不同的“基本类型”?如果需要,这是否支持返回自己的代理类型?还是其他?