为结构提升分配 list_of

Posted

技术标签:

【中文标题】为结构提升分配 list_of【英文标题】:Boost assign list_of for a structure 【发布时间】:2015-01-09 10:40:50 【问题描述】:

我有一个关于 boost::assign_list 的问题

struct AClass
AClass();
;

struct BClass
BClass();
;

typedef AInfo
   string infoname;
   AClass m_nAClass;
   BClass m_nBClass;
;

typedef list<AInfo> listOfAInfo;

listOfAInfo m_mlistOfAInfo =
     boost::assign::list_of("AInfoName1", AClass(), BClass() );

如何初始化结构的 map_lists 数组。这是遗留代码的一个版本,其中一些类被定义为带有构造函数的结构。

谢谢, pdk

【问题讨论】:

"where the some classes are defined as structs with the constructor."是什么意思? map_list_of 不匹配 list&lt;AInfo&gt;: boost.org/doc/libs/1_57_0/libs/assign/doc/… 谢谢你,是的,你是对的。我的意思是 list_of。 【参考方案1】:

我不确定 “其中一些类被定义为带有构造函数的结构” 是什么意思。

我看到的是聚合,即使在 C++03(或 C++98 IIRC)中也可以使用聚合初始化语法进行初始化:

AInfo obj =  "AInfoName1", AClass(), BClass() ;

也许你可以使用

typedef std::map<int, AInfo> listOfAInfo;

listOfAInfo m_mlistOfAInfo =
    boost::assign::map_list_of
        ( 1,  "AInfoName1", AClass(), BClass() )
        ( 2,  "AInfoName2", AClass(), BClass() );

typedef std::list<AInfo> listOfAInfo;

listOfAInfo m_mlistOfAInfo =
    boost::assign::list_of
        ( AInfo  "AInfoName1", AClass(), BClass() )
        ( AInfo  "AInfoName2", AClass(), BClass() );

这里是 Live On Coliru (c++11)。

似乎您不能使用与 Boost Assign 的聚合初始化器 = ... 略有不同的统一初始化语法 (AInfo ...),因为编译器不知道您正在初始化什么,不像obj 声明如上所示。

【讨论】:

感谢 Sehe:尝试了类似的解决方案。但是出现错误:'' 标记之前的预期主表达式,在 boost::assign::list_of ( AInfo ) 行上。当尝试将 AInfo 替换为 char 并尝试为 listofu8s m_mlist = boost::assign::list_of(u81); 时,也会得到类似的错误。但是当替换为 m_mlist = boost::assign::list_of(1);没有看到错误。类型转换是我认为的问题 这就是我解释的原因。我想您需要添加该构造函数或使用工厂函数 添加了构造函数,但没有编译:(。你编译了你在 Coliru 上发布的代码吗? @pdk Coliru 在线编译它,这就是它的用途。请注意它说c ++ 11。这就是我在之前评论中的意思:LIVE On Coliru 还有这个with a factory function

以上是关于为结构提升分配 list_of的主要内容,如果未能解决你的问题,请参考以下文章

结构成员大小大于为结构分配的内存

在 C 中声明指向结构的指针数组,但在需要之前不为结构分配内存

将二维数组分配为结构成员

为结构字段分配默认值[重复]

为具有双指针的结构内的动态结构数组分配内存**

为结构“错误”分配内存