福嶋です。

Kazuhiro HIWADA <hiwada / kuee.kyoto-u.ac.jp> wrote:
> 例えば複数の値(Foo)を返す関数:
> 
> int func(Foo **OUTPUT, Foo **OUTPUT)
> 
> を使うために、僕は次のような typemap を書いています。
> 
> %typemap(ruby,ignore) Foo **OUTPUT(Foo *temp),
>                       Bar **OUTPUT(Bar *temp)
> {
>   $target = &temp;
> }
> %typemap(ruby,argout) Foo **OUTPUT,
>                       Bar **OUTPUT
> {
>   $target = output_helper($target, Wrap_$basetype(*$source));
> }
> 
> class ならどれもいっしょのような気がする(確信はないが)ので、デフォル
> トの typemap が設定できると楽だよなあと思いました。

ああ、そういうことですか。今までそういう関数をラップしたことがな
いので、気が付きませんでした。

一瞬、そいうことはできないのではないかと思いましたが、以下のよう
にすれば一応 typemap 部分は共有できました。

%typemap(ruby,ignore) User **OUTPUT(void *temp)
{
  $target = ($type)&temp;
}
%typemap(ruby,argout) User **OUTPUT
{
  $target = output_helper($target, Wrap_$basetype(*$source));
}

%apply User **OUTPUT { Foo **OUTPUT };
int func(Foo **OUTPUT, Foo **OUTPUT);

---
福嶋正機