Generics rust:巨大的泛型构造函数,嵌套特征

Generics rust:巨大的泛型构造函数,嵌套特征,generics,traits,rust,nested-generics,Generics,Traits,Rust,Nested Generics,为了保持我一直致力于的库相当通用,我发现我自己编写了这段庞大的代码来构建一个结构: 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

为了保持我一直致力于的库相当通用,我发现我自己编写了这段庞大的代码来构建一个结构:

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
    }
  }
}
pub结构采样器{
摄像机:摄像机,
取样器:取样器,
表面积分仪:表面积分仪,
电影:电影,,
}
impl取样器
{
新店
(摄像机:摄像机,取样器:取样器,表面积分器:表面积分器,胶片:胶片)
->取样器{
取样器{
摄像机:摄像机,
取样器:取样器,
曲面积分器:曲面积分器,
电影:电影
}
}
}
虽然这是可行的,但这是一个痛苦的工作和非常重复。每个输入都有一个与之相关的特征,其中一些特征也被模板化(采样器)

有人有更简洁的表达方式吗?我是不是看错了这个问题


谢谢

您可以通过省略
new()
定义中的类型参数来简化代码,也就是说,您不需要编写
new()
,只需编写
new()
。相应的参数将取自
impl
子句


除此之外,我认为你运气不好。类型参数语法要求您键入所有这些名称。事实上,你在其他语言中也会做类似的事情。您可以尝试使用更简单的单字母名称作为类型参数;给定它们的编号,它的可读性可能会降低,但至少您可以尝试一下。

您可以通过省略
new()
定义中的类型参数来简化代码,也就是说,您不需要编写
new()
,只需编写
new()
。相应的参数将取自
impl
子句


除此之外,我认为你运气不好。类型参数语法要求您键入所有这些名称。事实上,你在其他语言中也会做类似的事情。您可以尝试使用更简单的单字母名称作为类型参数;给定它们的编号,它的可读性可能会降低,但至少您可以尝试。

+1缩写
impl
中的类型参数名称(它们不必匹配名称结构声明),例如
impl…
+1缩写
impl
中的类型参数名称(它们不必匹配名称结构声明),例如,
impl…