...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

どう書く?

問題設定が今悩んでいることとは違うのかもしれないけれども.

void main(){
  f("hoge", 1, "wwww", 123+456i);
}
void f(T...)(T args){
  // ここで g(h("hoge"), 1, h('wwww'), 123+456i); と同等の呼び出しをするにはどう書く?
}
void g(T...)(T args){
  // args を使う処理
}

つまり,特定の型(string)の引数に対してのみ,関数 h() を適用して,それ以外の引数はそのまま g() (writefln とかを想定)にスルーパスする f() はどう書けばよいか.
ただし main() と g() はこのままにしておく.
もし g(A, B); と g(A);g(B); が同じ結果になるならこう書けばいいが;

void f(T...)(T args){
  foreach (arg, args){
    static if(is(typeof(arg) : string)){
      g(h(arg));
    }
    else{
      g(arg);
    }
  }
}

g(A, B); のように一回で渡さなければいけないとする.
・・・うーん.
関数型言語の経験がないせいもあってコンパイルタイムのプログラミングはわけわからん><;