源码
use std::ops::Add;use super::constant::{Constant, NotZeroConstant};use super::variable::{Variable, FloatType};use super::merge::Merge;#[derive(Debug, Clone, Copy, PartialEq)]pub struct Adder<const N: i32, T: FloatType>(pub Constant<N>, pub Variable<T>)whereConstant<N>: NotZeroConstant;impl<const N: i32, T: FloatType> Merge for Adder<N, T>whereConstant<N>: NotZeroConstant,T: From<i32> + Add<Output = T>,{type Output = Variable<T>;#[inline]fn merge(self) -> Self::Output {Variable(T::from(N) + self.1.0)}}impl<const N: i32, T: FloatType, const B: i32> Add<Constant<B>> for Adder<N, T>whereConstant<N>: NotZeroConstant,Constant<{ N + B }>: Add<Variable<T>>,{type Output = <Constant<{ N + B }> as Add<Variable<T>>>::Output;#[inline]fn add(self, _b: Constant<B>) -> Self::Output {Constant::<{ N + B }> + self.1 }}impl<const N: i32, T: FloatType> Add<Variable<T>> for Adder<N, T>whereConstant<N>: NotZeroConstant,T: Add<T, Output = T>,Variable<T>: Add<Variable<T>, Output = Variable<T>>,{type Output = Self;#[inline]fn add(self, b: Variable<T>) -> Self::Output {Adder(self.0, self.1 + b)}}