【问题标题】:Boost assign list_of for a structure为结构提升分配 list_of
【发布时间】: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。

标签: c++ boost stl


【解决方案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(u8{1}); 时,也会得到类似的错误。但是当替换为 m_mlist = boost::assign::list_of(1);没有看到错误。类型转换是我认为的问题
  • 这就是我解释的原因。我想您需要添加该构造函数或使用工厂函数
  • 添加了构造函数,但没有编译:(。你编译了你在 Coliru 上发布的代码吗?
  • @pdk Coliru 在线编译它,这就是它的用途。请注意它说c ++ 11。这就是我在之前评论中的意思:LIVE On Coliru
  • 还有这个with a factory function
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2012-10-30
  • 2021-12-15
相关资源
最近更新 更多