如果我有一个如下所示的元组列表:
Data = [
# OP, FLAG, IDENT, NAME
( Op.GA, Flag.GA, "GA", "Asset" ),
( Op.LP, Flag.LP, "LP", "Low" ),
( Op.HP, Flag.HP, "HP", "High" ),
( Op.CU, Flag.CU, "CU", "Custom" ),
]
Run Code Online (Sandbox Code Playgroud)
有没有一种聪明的方法可以将其转换为对象列表,这样就像我执行了以下操作:
Objects = [
# OP, FLAG, IDENT, NAME
OBJECT( Op.GA, Flag.GA, "GA", "Asset" ),
OBJECT( Op.LP, Flag.LP, "LP", "Low" ),
OBJECT( Op.HP, Flag.HP, "HP", "High" ),
OBJECT( Op.CU, Flag.CU, "CU", "Custom" ),
]
Run Code Online (Sandbox Code Playgroud)
我希望有类似的事情
Objects = create( OBJECT, Data )
我想我设法弄清楚如何使用循环和元组解包一次转换一个元素(对我来说是新的)。因此,本质上,迭代元组列表并在将它们附加到第二个列表时一次构造一个对象。这是处理这个问题的最好方法吗?
原因:我试图允许外部代码将类似枚举的属性作为元组列表发送,然后使用它来生成类实例列表来表示类似枚举的数据。我需要类的唯一原因是允许外部代码使用命名成员引用数据,例如enum_ref.Ident(而不是enum_ref[2] …
是否有任何内置的 C++ 机制能够自动生成代码来调用类的每个成员上的函数或运算符?
例如,如果我们有数百种类型需要使用一组特定的函数或运算符。在每一种类型中,每种类型都需要为其所有成员调用相同的函数或运算符(仅此而已)。
对于一些特定的示例,我们可以说类型具有函数Save()and Load(),或流运算符<<and >>。怎样才能在调用时自动执行++呢A.Save(s)?如果代码只是将执行相同地传递给所有成员,是否有任何方法可以自动化该过程?B.Save(s)C.Save(s)TYPE::Save(stream s)
这是自动生成的一些代码的示例(仅是函数Save())。编辑注意:此示例显示所有 3 个成员为同一类型,但该解决方案应该适用于任何类型组合的成员,只要它们都共享相关的函数/运算符
class TYPE
{
protected:
XTYPE A, B, C;
public:
void Save(stream s)
{
A.Save( s );
B.Save( s );
C.Save( s );
}
};
Run Code Online (Sandbox Code Playgroud)
我的一个旧引擎使用疯狂的循环宏来实现这一目标。它使得使用宏构建类型变得更加容易(当有数百个类使用它们时),并且生成的类并不难理解,但宏本身很混乱并且过于复杂。我希望有更多的东西......内置到语言中。