寻找一种简单的方法来重新初始化结构
Looking for an easy way to reinitialize a struct
我有一个名为CoolStruct的结构体:
struct CoolStruct
{
int id;
uint32 type;
uint32 subtype;
String name;
};
我也有一个这些结构体的向量:
std::vector<CoolStruct> coolVector;
我想创建一堆具有预定义值的结构体来push_back到这个coolVector中。我希望代码不会变得混乱和丑陋。我想保留这个符号:
CoolStruct t = {1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")};
coolVector.push_back(t);
CoolStruct t = {2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")};
coolVector.push_back(t);
但当然这不起作用…不允许进行重新初始化。有没有其他的解决方案,使这尽可能可读?我能想到的唯一替代方法是手动设置结构体的每个参数:
t.id = whatever; t.type = somethingelse; t.subtype = thisisalotofcode; t.name = justtosetupthisvector;
coolVector.push_back(t);
如何:
CoolStruct t1 = {1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")};
coolVector.push_back(t1);
CoolStruct t2 = {2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")};
coolVector.push_back(t2);
在c++ 0x中,我认为你应该能够做到:
CoolStruct t;
t = {1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")};
coolVector.push_back(t);
t = {2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")};
coolVector.push_back(t);
甚至:
coolVector.push_back({1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")});
coolVector.push_back({2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")});
事实上,如果你真的想要更有创意(并且你不想保留任何先前的元素),你可以用下面的语法替换整个向量:
coolVector = {
{1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")},
{2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")}
};
如果您添加一个简单的构造函数:
struct CoolStruct
{
CoolStruct(int id, uint32 type, uint32 subtype, String name) : id(id), type(type), subtype(subtype), name(name) {}
int id;
uint32 type;
uint32 subtype;
String name;
};
你可以这样做:
CoolVector.push_back(CoolStruct(1, EQData::EQ_EFFECT_TYPE_PARAMETRIC, 0, T("Parametric")));
CoolVector.push_back(CoolStruct(2, EQData::EQ_EFFECT_TYPE_FILTER_LOW_PASS,EQData::EQ_FILTER_TYPE_FILTER_BUTTERWORTH_12DB, T("Low Pass")));
相关文章:
- 通过方法访问结构
- 有什么方法可以遍历结构吗
- 没有为自己的结构调用列表推回方法
- 在 c++ 中拥有一组结构的正确方法是什么?
- 如何在方法中传递结构参数
- 对结构方法的未定义引用
- 不同的类或结构初始化方法之间的性能差异是什么?
- 让编译器告诉什么确切的纯虚拟方法使结构抽象?
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 在C++中更改结构内部元素的方法?
- 学习数据结构和算法的简单方法
- 类方法 - 数据结构中 For 循环的运行时错误
- 如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
- 哪一个是最好的方法类或结构?在 C++ 中
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 结构/方法不起作用
- 删除父/子窗口层次结构的最佳方法
- 任何方法都可以在C++中比较数据结构中的许多方法
- 具有重载方法的可变参数数据结构
- 成员初始化列表?合成方法?结构/数组编译问题