你如何处理它们?我有一些类(通常是持有统计数据的类等),有20多个变量成员,初始化列表最终会很长,如果我不手动环绕,则会超出页面宽度。你是试着打破这些课程还是以其他方式解决这个问题?
它看起来不是很整洁,但有时我会将列表中的变量写在彼此之上,如下所示:
myConstructor(var1, var2, var3, ..., varN) :
member1(var1),
member2(var2),
member3(var3),
...
memberN(varN)
答案 0 :(得分:7)
如果我不手动环绕
,初始化列表会很长,超出页面宽度
一种方法是重构:例如,不要传入4个原始变量(“top”,“left”,“width”和“height”),只需传入一个复合变量(“rectangle”)。
或者,只是与源代码布局有关:
class Foo
{
int m_a;
int m_b;
int m_c;
public:
Foo(
int a,
int b,
int c
)
: m_a(a)
, m_b(b)
, m_c(c)
{
}
};
答案 1 :(得分:5)
超出页面宽度
嗯,首先,您应该决定页面宽度并坚持下去。如果需要,可以使用编辑器中的自动换行。读取大于窗口大小的代码确实很困难,尤其是对于使用终端的vi或emacs的同事而言。选择页面宽度并坚持下去 - 这意味着将这些初始化程序列表包装到多个(可能很多)行上。
你试着分解这些课吗?
20是很多参数,它可能值得分解。 “上课”通常是代码气味,表明重构是必要的。
它并不自动意味着你应该解决问题,指南总是有例外。但是,绝对认为它是一种选择。
当你在头文件中声明它们时,你(或者你可以)用评论对它们进行分组吗?例如:// These next few parameters are for file IO
和// These next parameters are for the widget
,它将为您提供一个好的模板,以便为哪些对象提取抽象。
{您的示例代码}
我认为它具有很强的可读性和“整洁性”,尽管它可能很长。正如我所提到的,为了解决这个问题,我会考虑将其分解为更小的类。
答案 2 :(得分:2)
任何具有二十个构造函数参数的类都可能需要重构。我会考虑使用composition,将大班分成更小的独立作品。考虑哪些构造函数参数紧密相关,并将这些变量分组到它们自己的类中。然后,您可以将新类的实例传递给需要访问数据的类。