2015-11-10 92 views
0

Hy你们所有人。C++ 11/Auto - 我应该怎么做?

Soo我决定把我的代码提交给C++ 11。 为了简化我的代码我想使用autoiterators

这是我的代码。

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; 
} 

我应该如何使这个代码在c + + 11更短的auto? 而且我还可以在这个功能中使用智能指针?

编辑:DO_ALL_BLEND_INFO(iter)被定义为

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

什么是'DO_ALL_BLEND_INFO(iter)'? – user463035818

+0

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

+2

我并没有真正迷恋某些人,让他们的代码“尽可能短“。为了可读性,而不是长度。 –

回答

0

随着auto和一系列基于对,可以更换为循环,由宏隐藏着以下,摆脱完全由宏:

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

它既简短又易于阅读。

+0

嘿谢谢你。我会现在检查。 – user5546877