キャストして保存するときは、vector等のコンテナ要素をポインタにするというか、ベストプラクティスがわからん、そもそもこの設計はよくないかも。使ったプログラムを書いている。C++の世界だけで完結するならこれでいいのだけれども、mrubyをバインディングしようとすると困った。持たせるようになっていて、mrubyだとDATA_PTRマクロでRubyのオブジェクト型であるmrb_value型を渡すと、void*のポインタが返ってくる。ここにオリジナルの構造体や値のポインタを入れれば良い。shared_ptr<T>のオブジェクトをRuby側にもたせようとする方法は2つ思いつく。shared_ptr<T>#get()で生ポに変換して格納する。いずれの場合もshared_ptr<T>の参照カウントは無効になる。格納する以上諦めるしかない。)1.の場合はハマる確率がかなり高い。shared_ptr自体のオブジェクトを関数内で生成するタイプならば、その関数を抜けた時点で、格納したオブジェクトは無効になる。次に使おうとしたときに、アクセス違反になる。C言語をやっていれば当たり前のことではあるが。2.場合は格納は問題ないが、次にC++の世界に戻ってきたときに困る。オブジェクトを作ってやる必要がある。等を作り、そのインデックスを指してやる。ハッシュ関数も必要なので作ってやる。}なお、そもそも設計がマズいかもしれない。Lua等でもおこるはず。いい方法があったら教えてください。つかってキーバインドを置き換える。