やっぱりWIPI-C、正攻法で行こうとすると厳しいな。
C++使うことくらい想定したAPIにして欲しかった。
とりあえずop newでWIPIのヒープに
オブジェクトを生成するのをどうするか?と考えていた。
op newはvoid*以外返せないので、placement-newくらいしか思い当たらない。
すごく単純にやるとグローバルに
void* operator new(size_t required, M_Uint32& handle)
{
handle = MC_knlAlloc(required);
return MC_GETDPTR(handle);
}
こんな感じのop newをオーバーロードして
M_Uint32 handle = 0;
new(handle) Hoge(arg1, arg2, arg3); // 戻り値は(コンパクションが起ったら無効になるので)捨てる…
こんな感じにオブジェクトを作り、その後
tcWipiPointer
こうやってスマートポインタに渡す………スマートじゃないなぁ。
placement-newの追加の引数にスマートポインタを渡すと、テンプレートだから嫌な予感がするし、値型として振舞わせたいスマートポインタに継承を使った実装をするのも嫌だなと。
っていうか、そもそも生成対象のクラスの構築中にコンパクションを起こす関数が呼ばれたらコンストラクタが領域破壊しかねないな………。
できればWIPI-Cというものは世界から無かったことになってくれると嬉しいかも--;