Boost assign list_of 一个结构
Boost assign list_of for a structure
我有一个关于 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 constructors" 是什么意思。
我看到的是聚合,即使在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)。
似乎你不能使用统一的初始化语法(AInfo {...}
),它与 Boost Assign 的聚合初始化器 = { ... }
) 有细微的不同,因为编译器不知道你在做什么'正在初始化,与上面显示的 obj
声明不同。
我有一个关于 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 constructors" 是什么意思。
我看到的是聚合,即使在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)。
似乎你不能使用统一的初始化语法(AInfo {...}
),它与 Boost Assign 的聚合初始化器 = { ... }
) 有细微的不同,因为编译器不知道你在做什么'正在初始化,与上面显示的 obj
声明不同。