【发布时间】:2014-05-17 18:30:23
【问题描述】:
为了保持我一直在开发的库的通用性,我发现自己编写了这么多的代码来构建一个结构:
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
}
}
}
虽然这行得通,但使用起来很痛苦,而且非常重复。每个输入都有一个与之关联的特征,其中一些特征也是模板化的(采样器)。
有没有人有更简洁的方式来表达这一点?我是不是看错了问题?
谢谢!
【问题讨论】:
标签: generics traits rust nested-generics