【发布时间】:2011-07-13 20:08:02
【问题描述】:
我有一个名为 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);
【问题讨论】:
-
为什么不写一个合适的构造函数呢?
-
@Konrad:如果您可以使聚合初始化正常工作,那绝对是没有任何理由的大量样板。
-
使用 C++0x,然后你可以用一个新的结构覆盖。聚合具有微不足道的赋值运算符,因此一旦您被允许编写
t = {a, b, c};,这将是一件轻而易举的事。 -
@TomalakGeret'kal 我完全反对样板,但认为构造函数是样板有点过分。 其实,我喜欢直白;因此,我总是 覆盖构造函数。我也讨厌 C++ 为我创建了一个默认构造函数。
-
@Konrad:构造函数只使用与参数相同的东西初始化成员,这是完全没有意义的。也许您想定义 几个 构造函数,因为您显然非常喜欢写出该成员列表!
标签: c++ struct initialization