const
メンバーまたは既定のコンストラクターを持たないメンバーを初期化する前に、クラス コンストラクターの引数に対して何らかの処理を行う必要がある場合があります。
たとえば、Java ではこれを行うことができます (理由は聞かないでください。これは単なる例です)。
class A
{
public A(int area, float aspectRatio) {
int w = foo(area, aspectRatio);
int h = bar(area, aspectRatio);
image = new Image(w, h);
}
private final Image image;
}
C++ では、同じようになります
class A
{
public:
A(int area, float aspectRatio)
: image(foo(area, aspectRatio), bar(area, aspectRatio))
{
}
private:
const Image image;
}
そして、複雑な初期化を必要とするメンバーが増えると、初期化リストはますます巨大になります。この問題を回避する方法はありますか?
UPD 1:
メンバーにコピー コンストラクターがない場合はどうなりますか? 例のように、各引数の計算を関数に抽出するだけですか?