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