などの型との関係を指定します。は、私は、次の仕事のようなものを作りたいの形質またはマクロ
use std::ops::Add;
trait CanBeAdded: Sized where f64: Add<Self> {}
fn add2<X: CanBeAdded>(x: X) {}
fn main() {}
上記のコンパイルに失敗します。
error[E0277]: the trait bound `f64: std::ops::Add<X>` is not satisfied
--> src/main.rs:5:1
|
5 | fn add2<X: CanBeAdded>(x: X) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::ops::Add<X>` is not implemented for `f64`
|
= help: consider adding a `where f64: std::ops::Add<X>` bound
= note: required by `CanBeAdded`
私は」特定のimpl
の存在を特性によってアサートしようとしています。つまり、X: CanBeAdded
はf64: Add<X>
を意味します。私はこのような機能のwhere句に境界を追加することができますが:
fn add2<X>(x: X) where f64: Add<X> { }
それは扱いにくくなるので、私はそれらの多くを持っていると私は何度も境界を繰り返さないことを好むだろう。これには良い解決策がありますか?たとえば、一連のwhere
句に展開されるマクロを含めることは可能ですか?
重複(HTTP [新しい特性を定義するために、複数の特性を結合する方法があります]:// stackoverflowのは。 com/q/26983355/155423) – Shepmaster
ええと、2つ目のタイプの 'f64'が含まれているので違います.2つ以上のタイプの関係があります。私はそれをもっと明示すべきですか? – yong
@DK 'impl CanBeAdded for X where f64:Add {}'という行を追加すると、 'imp'はどうなるでしょうか? https://play.rust-lang.org/?gist=59b0932a780fdcaf21848de9d310621a&version=nightly&backtrace=0 –
yong