RTTIを使わない型名の取得
ひとまず単体テストのプロジェクトが作成できました。
コンパイラを「Clang with Microsoft CodeGen」にしていて、
Clang用のプロジェクトテンプレートにはライブラリしか無いので
後から実行形式に設定を変えるなど。
VS2017のClangがどういうバージョンなのかまだ調べて無いですが…。
テスト自体は最低限動かせるところまでと、
自作の型情報クラスの動作を軽く確認出来るところまで。
型情報クラスでは型名を文字列で取得出来るように対応しました。
あ、RTTIは使わない方針なので、typeidとかは使わずに
自前でゴリゴリ型名を抽出してます。
抽出方法ですが、下のコードで __PRETTY_FUNCTION__ のマクロの部分、
例えばテンプレート引数が int だった場合は
"TTypeInfo<int>::TTypeInfo() [T = int]"
という文字列に展開されます。
template <typname T> class TTypeInfo { public: TTypeInfo() { __PRETTY_FUNCTION__; // ここ } };
これは Clang の場合で、
msvcだと確か __FUNCTION__ マクロを使う必要があって、
"TTypeInfo<int>::TTypeInfo"
という文字列に展開されたはず。
おいおいmsvcにも対応するつもりなのでまたその時確認します。
それで、上記の文字列から型名部分を抽出して取得できるようにしています。
ソースコードはもう少し整理できたら公開しようと思ってます。
※githubにはプッシュしてありますが。
次はもう少しTypeInfo用のテストコードを書く予定。