长构造函数初始化列表

Kri*_*ato 11 c++ whitespace initialization

你是如何处理它们的?我有一些类(通常持有统计等类),还有一些20+成员变量和初始化列表结束很长,超出页面宽度,如果我没有手动缠绕.你试图打破这样的类或你在一些其他的方式解决这个问题?

它看起来并不很整洁,但有时我写在列表中的变量对方像这样的顶部:

myConstructor(var1, var2, var3, ..., varN) :
 member1(var1),
 member2(var2),
 member3(var3),
 ...
 memberN(varN)
Run Code Online (Sandbox Code Playgroud)

Chr*_*isW 7

如果我不手动环绕,初始化列表会很长,超出页面宽度

一种方法就是重构:例如,代替传入4个原始变量("顶部","左","宽度"和"高度"),只是在通过一种化合物变量("矩形").

或者,只是与源代码布局有关:

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)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)


Ste*_*hen 5

超出页面宽度

好吧,首先,您应该决定页面宽度并坚持下去.如果需要,可以使用编辑器中的自动换行.读取大于窗口大小的代码确实很困难,尤其是对于使用终端的vi或emacs的同事而言.选择页面宽度并坚持下去 - 这意味着将这些初始化程序列表包装到多个(可能很多)行上.

你试着分解这些课程吗?

20是很多参数,它可能值得分解."上课"通常是代码气味,表明重构是必要的.

它并不自动意味着你应该解决问题,指南总是有例外.但是,绝对认为它是一种选择.

当你在头文件中声明它们时,你(或者你可以)用评论对它们进行分组吗?例如:// These next few parameters are for file IO并且// These next parameters are for the widget,这将为您提供一个好的模板,以便为哪些对象提取抽象.

整体上非常大的类表示很多复杂的状态,而复杂的状态往往会导致错误.你应该像功能一样,更喜欢让它们保持小巧和专注.

{您的示例代码}

我认为这是非常可读和"整洁",虽然它可能是相当长的列表.正如我所提到的,为了解决这个问题,我会考虑将其分解为更小的类.