0
我有一个循环遍历随机访问迭代器。典型的用法是end()是过时的,不应该解除引用,所以我需要执行我的条件之前我开始初始化东西。这里是我的具体代码:优雅的方式来移动初始化器在条件循环后面
template <typename RAI>
void foo(RAI begin, RAI end) {
typedef typename std::iterator_traits<RAI>::value_type VT;
SOME_TYPE<VT> key = SOME_TYPE<VT>(*begin);
while (begin != end) {
do_stuff(key);
do_more_stuff(key);
key = SOME_TYPE<VT>(*++begin)
}
}
如果开始==结束的时候,函数被调用,那么我最终取消引用结束,这是我可能没有自己的内存空间。如果SOME_TYPE
或VT
没有空构造函数,则无法声明SOME_TYPE<VT> key;
。我可以在开始时输入if...then
,但那看起来很......很丑陋。有没有更好的办法?
它会抱怨多重声明吗? – Scott
如果没有相关类型的空构造函数,它会在循环之前声明它。 – Scott
呵呵。不知何故,我的印象是我无法在循环中声明一个变量...... TIL – Scott