using moduleの実装について

モジュールはC/C++が呼び出せるライブラリ形式(動的読み込みが可能なものに限る)で実装する。
中には必ず
open(void)
close(void)
run関数群(後述)
を入れる。


run関数群
実行される関数は必ずしも引数が一つづつとは限らないので、ポインタを使い返り値の型の違いで関数を分ける。
幸いなことに、nullptrには整数型が複数個ないため実装の数を減らすことができる。
bool runRB(std::string, Int*, String*, bool*);
Int runRI(std::string, Int*, String*, bool*);
String runRS(std::string, Int*, String*, bool*);
最初の引数std::stringは機能の名前になる

モジュールファイルには各機能に必要な引数の個数と返り値の型を書いておく。
bool func(Int 2, String 0, bool 0);
上記のような機能定義の場合、呼び出される関数はrunRBとなり
runRB("func", Int*, nullptr, nullptr);
となる。

同時に読み込むDLLは一つまでとする。(同じ名前の関数ができてしまうため。)
読み込んだら初めにopen、終わったらcloseを呼びリンクを解く