簡體   English   中英

C ++ 11自動轉換

[英]C++11 auto transform

我有這個宏

#define DO_ALL_BLEND_INFO(iter) for (iter=s_blend_info.begin(); iter!=s_blend_info.end(); ++iter)

這是主要功能。

BLEND_ITEM_INFO* blend_info;
T_BLEND_ITEM_INFO::iterator iter;

DO_ALL_BLEND_INFO (iter)
{
    blend_info = *iter;
    if (blend_info->item_vnum == item->GetVnum())
    {

    }
}

我想做的是擺脫這個宏,並使用自動。 但是我不明白如何在這里使用自動...我想刪除那個宏,但是如果我直接在宏中添加自動呢?

以下內容,僅此而已:

for (const auto &blend_info:s_blend_info)
{
    if (blend_info->item_vnum == item->GetVnum())
    {

    }
}

我的意思是“除此之外”。 沒有宏,沒有任何迭代的聲明。 沒有聲明blend_infoauto范圍迭代會為您完成它。

這是另一種方法。 我修改代碼並將s_blend_info替換為vector<int>以獲得可編譯的解決方案。

 int main()
 {
vector<int> s_blend_info;
int  blend_info;
vector<int>::iterator iter;
int item = 10;
for (auto iter = s_blend_info.begin(); iter != s_blend_info.end(); ++iter)
{
    blend_info = *iter;
    if (blend_info == item)
    {

    }
}
for ( auto &iter  : s_blend_info)
{
    if (blend_info == item)
    {

    }
}
DO_ALL_BLEND_INFO_GENERIC(s_blend_info, iter)
{
    blend_info = *iter;
    if (blend_info == item)
    {

    }
}
}

#define DO_ALL_BLEND_INFO(iter) for (iter=s_blend_info.begin(); iter!=s_blend_info.end(); ++iter)
#define DO_ALL_BLEND_INFO_GENERIC(container,iterator)  for (iterator=container.begin(); iterator!=container.end(); ++iterator)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM