C++11/自动-我应该怎么做

C++11/ Auto - How i should make this?

本文关键字:我应该 自动 C++11      更新时间:2023-10-16

Hy大家好。

所以我决定把我的代码重新编译成c++11。为了简化我的代码,我想将auto用于iterators

这是我的密码。

bool Blend_Item_init()
{
    BLEND_ITEM_INFO *blend_item_info = NULL;
    T_BLEND_ITEM_INFO::iterator iter;
    char file_name[256];
    snprintf (file_name, sizeof(file_name), "%s/blend.txt", LocaleService_GetBasePath().c_str());
    sys_log(0, "Blend_Item_init %s ", file_name);
    DO_ALL_BLEND_INFO(iter)
    {
        blend_item_info = *iter;
        M2_DELETE(blend_item_info);
    }
    s_blend_info.clear();
    if (false==Blend_Item_load(file_name))
    {
        sys_err("<Blend_Item_init> fail");
        return false;
    }
    return true;
}

我应该如何用auto在c++11中使这个代码更短?我也可以在这个函数中使用智能指针?

编辑:DO_ALL_BLEND_INFO(iter)定义为

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

使用auto和基于范围的for,您可以用以下内容替换被宏隐藏的for循环,并完全消除宏:

for(auto blend_item_info : s_blend_info)
    M2_DELETE(blend_item_info);

它既短又易读。