在while循环中的智能指针测试:使用逗号运算符? [英] Smart pointer test in a while loop: use the comma operator?
本文介绍了在while循环中的智能指针测试:使用逗号运算符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我最近看到这样的代码:
I recently saw code like this:
// 3rd Party API: (paraphrased)
void APIResetIterator(int ID); // reset iterator for call to next()
Mogrifier* APINext(int ID); // User must delete pointer returned
...
typedef std::unique_ptr<Mogrifier> MogPtr;
...
const it listID = 42;
APIResetIterator(listID);
MogPtr elem;
while (elem.reset(APINext(listID)), elem) {
// use elem
}
这是个好主意吗?是否有效?
Is this a good idea? Does it work?
我将添加相应的for循环以方便参考:
I'll add the corresponding for loop for easy reference:
for (MogPtr elem(APINext(listID)); elem; elem.reset(APINext(listID));) {
// use elem
}
p>
推荐答案
也许我们应该写成:
template<class SPT, typename P>
SPT& reset(SPT& smartPtr, P ptr) {
smartPtr.reset(ptr);
return smartPtr;
}
for (MogPtr elem; reset(elem, APINext(listID));) {
// use elem
}
这篇关于在while循环中的智能指针测试:使用逗号运算符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文