为结构提升分配 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<AInfo>
: 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的主要内容,如果未能解决你的问题,请参考以下文章