コレは出来ない…のかぁ… orz

void func<T>(T t, delegate void callback (T t, int foo))
{
  // 色々処理
  int foo = hoge();
  callback(t, foo);
}

的なことをやりたかったんですが、仮引数の所で delegate が(多分)使えないアルねー…。 関数ポインタのノリで書いちゃったら全然駄目だったアルねー…

コレも駄目だし…

delegate void CALLBACK_KANA(Kana k, int foo);
delegate void CALLBACK_GIN(Gin g, int foo);

void func<T, D>(T t, D callback)
{
  // 色々処理
  int foo = hoge();
  callback(t, foo); // tの型が決まってないのでアウト
}

クラスに囲うしか無いかしら…。関数1つの為にクラスってのもなんかアレだけど…

class HOGE<T>
{
  public delegate void CALLBACK(T t, int foo);
  public static void func(T t, CALLBACK callback)
  {
    // 色々処理
    int foo = hoge();
    callback(t, foo);
  }
};
// C++
template<typename T>
void func(T& t, void (*CALLBACK)(T& t, int foo))
{
  // 色々処理
  int foo = hoge();
  (*callback)(t, foo);
}

// とか、もっと簡略化(?)して

template<typename T, typenamen FN>
void func(T& t, FN fn)
{
  // 色々処理
  int foo = hoge();
  fn(t, foo);
}

とかが恋しいです(ぉ