0

私が取り組んできたライブラリをかなり一般的なものに保つために、構造体を構築するためだけにこの巨大なコードを書いていることに気づきました。

pub struct SampleRenderer<Camera_T, Sampler_T, SurfaceIntegrator_T, Filter, Sample_Iter> {
  camera : Camera_T,
  sampler : Sampler_T,
  surface_integrator : SurfaceIntegrator_T,
  film : Film<Filter>,
}

impl<Camera_T, Sampler_T, SurfaceIntegrator_T, Filter, Sample_Iter> SampleRenderer
    <Camera_T, Sampler_T, SurfaceIntegrator_T, Filter, Sample_Iter> {
  pub fn new<Camera_T : Camera, Sampler_T : Sampler<Sample_Iter>, SurfaceIntegrator_T : SurfaceIntegrator, Filter, Sample_Iter>
    (camera : Camera_T, sampler : Sampler_T, surface_integrator : SurfaceIntegrator_T, film : Film<Filter>)
    -> SampleRenderer<Camera_T, Sampler_T, SurfaceIntegrator_T, Filter, Sample_Iter> {
    SampleRenderer {
      camera : camera,
      sampler : sampler,
      surface_integrator : surface_integrator,
      film : film
    }
  }
}

これは機能しますが、作業が面倒で、非常に反復的です。各入力にはそれに関連付けられた特性があり、これらの特性の一部はテンプレート化されています (Sampler)。

誰かがこれを表現するよりクリーンな方法を持っていますか? 私は問題をすべて間違って見ていますか?

ありがとう!

4

1 に答える 1

4

定義で型パラメーターを省略することで、コードを単純化できますnew()。つまり、 を記述する必要はなくnew<Camera_T : Camera, Sampler_T : Sampler<Sample_Iter>, SurfaceIntegrator_T : SurfaceIntegrator, Filter, Sample_Iter>()、 だけを記述できますnew()。対応するパラメータはimpl<...>句から取得されます。

これ以外は、あなたは運が悪いと思います。型パラメーターの構文では、これらすべての名前を入力する必要があります。実際、他の言語でも同様のことを行います。型パラメーターには、より単純な 1 文字の名前を試してみることができます。それらの番号を考えると、読みにくくなる可能性がありますが、少なくとも試すことができます。

于 2014-05-17T20:28:09.920 に答える