UEでC++使ってると、特にファイル名に困る。
例えば、Widgetクラスと、そのWidgetに表示するためのデータを保持するためのクラスを作るとする。
通常のC++ならば、Widgetクラスを宣言した後にそのインナークラスとしてデータクラスを宣言したり、名前空間で区切ったりすればいい。
そうすることで、Widgetの利用者に対して互いの強力な依存関係を表現しつつ、関連機能の所在を明確にすることが出来る。
普通はそういう感じでクラスの名前を節約したりするが、UE上ではそういうのが全くと言っていいほど出来ない。
UEC++環境下では、WidgetクラスをWidgetという名前にした上で、Widgetのデータを保持するクラスはWidgetDataという名前で別クラスとして宣言する事になる。
更に言えば、仮にListViewでDataTableの中身を全て表示する為のWidgetを作る場合、DataTableListViewというWidgetクラスの名前になる。
そして、そのListViewのEntryはDataTableListViewEntryという名前になるし、そのデータクラスはDataTableListViewEntryDataという名前になる。
これはあくまでも例として普遍的な命名をしてるからまだしも、実際のプロジェクトではもっと具体的な命名になると思う。
インナークラスも名前空間も使えない上に、C++のファイル名が32文字以内という制約のあるUEC++環境下で、取り違いを起こさない程度に具体的な名前をファイルの名前にするのがとてもキツイ。
強いて言うなら、デバッグ用の機能にもプレフィックスで”Debug”みたいに、デバッグ用の機能であることを表す文字を入れないといけない。
普通、デバッグ用の機能が必要ない実装箇所についてはファイルをインクルードしなければいいだけだし、名前空間をインポートしなければいいだけだが、UEではそうもいかない。
なんか良い方法あるのかなぁー。
同じ問題を抱えてるプロジェクト絶対たくさんあると思うけどなぁー。
ということで、どう解決するか。
仮にDataTableの中身を全て表示する為のListViewを作る場合、ファイル名は汎用的に”DataTableListView.h”みたいなファイル名にしておいて、似た用途のクラスは全て同じファイルに宣言するのが良さそうと思った。
DataTableであるAとBがある場合、DataTableListView.hにAListViewとBListViewを2つとも宣言する。
データクラスに関しても同じ。
本来、1ファイルのボリュームは必要最小限に抑えるために1ファイル1クラスが基本だと思うが、今回ばかりは無理だ。
(ΦωΦ)