C++ 长构造函数初始化列表

C++ 长构造函数初始化列表,c++,initialization,whitespace,C++,Initialization,Whitespace,你是怎么对付他们的?我有一些类(通常是包含stats等的类)有大约20多个变量成员,初始化列表很长,如果我不手动换行的话,会超出页面宽度。你是否尝试将这些课程进行分类,或者以其他方式处理这些问题 它看起来不太整洁,但有时我会将列表中的变量写在彼此的顶部,如下所示: myConstructor(var1, var2, var3, ..., varN) : member1(var1), member2(var2), member3(var3), ... memberN(varN) 超出页

你是怎么对付他们的?我有一些类(通常是包含stats等的类)有大约20多个变量成员,初始化列表很长,如果我不手动换行的话,会超出页面宽度。你是否尝试将这些课程进行分类,或者以其他方式处理这些问题

它看起来不太整洁,但有时我会将列表中的变量写在彼此的顶部,如下所示:

myConstructor(var1, var2, var3, ..., varN) :
 member1(var1),
 member2(var2),
 member3(var3),
 ...
 memberN(varN)
超出页面宽度的

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

你有没有试着把这些课程分解

20是一个很大的参数,它可能应该被分解。“上帝类”通常是一种代码气味,表明重构是必要的

这并不自动意味着你应该把事情分解,指导方针总是有例外的。但是,一定要把它看作是一种选择。 当您在头文件中声明它们时,您(或者您可以)使用注释对它们进行分组吗?例如:
//接下来的几个参数用于文件IO
//接下来的几个参数用于小部件
,这将为您提供一个很好的模板,对象将被抽象

总的来说,真正大的类表示很多复杂的状态,而复杂的状态往往会导致bug。您应该像处理函数一样,更喜欢使它们保持小而集中

{您的示例代码}


我认为这本书可读性和“整洁”,尽管它可能会是一个相当长的列表。正如我提到的,为了解决这个问题,我会考虑把它分解成更小的类。 任何具有二十个构造函数参数的类都可能需要重构。我会考虑使用,把大班级分成更小、独立的部分。考虑哪些构造函数参数是紧密相关的,并将这些变量分组到它们自己的类中。然后可以将新类的实例传递给需要访问数据的任何类

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

一种方法是重构:例如,不传入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)
    {
    }
};

我将逗号放在每个成员之前,这样我就可以插入或删除成员,而不必触及源代码的相邻行。因此,即使考虑到主要用于数据存储的类(例如持有不同统计数据的类),其中包含许多成员,你仍然会尝试将它们分解为更易于管理的部分?我不知道为什么我会在每个参数之后,但在每个初始值设定项之前放逗号。好吧,我不想阅读这样的代码:函数参数和成员初始值设定项与它们之间的右括号位于同一缩进级别上?颤抖