休日出勤

おまけに出張。

移動中、暇なので、昨日気づいた問題について考えていた。今更なのだが、C++ってstatic constな配列を初期化できなくない?

Javaでクラスとかインタフェースの中で定数を定義することが多いが、僕は、定数の配列もけっこう使う。例えば、インタフェースが持つ定数の一覧を、配列として持っておくと、結構便利だ。

interface IHoge {
 public static final int COLOR_RED = 0;
 public static final int COLOR_GREEN = 1;
 public static final int COLOR_BLUE = 2;

 public static final int[] COLORS = {COLOR_RED, COLOR_GREEN, COLOR_BLUE};
}

C++ではどうするのが良いのか。ベクタで代用するのか。でも、ベクタの初期化用の関数を用意しないといけない。単なる配列ですむところが、微妙に大掛かりになってしまった。何とかできないか?

ちなみに、constを外すという選択肢もあると思う。こうすると、普通に初期化できるようになるので、プログラムの構文は簡単になる。しかし、publicな変数を外のクラスに見せること、初期化のタイミングが不明確になるという二点で、かなり危険。徹底的なドキュメントが必要だ。

制約がたくさんあるコンポーネントを使うのは、しんどい。僕だったら絶対使い方を間違える。というわけで、僕は前者が好きだな。

プログラマ/プログラミングを何に例えるかという話がある。色々なところで、色々なことが言われている。建築家、外科医、画家、編み物、最近は、園芸なんてのも見た。「プログラム中の依存関係を少なくするために散々回り道をして、そして、一方では、可読性をあげるために、血を流している。」こんな馬鹿なことばかりしているプログラマというのは、一体何なのだろう。そんなことを、ぼんやりと考えていた。