任意の型の要素を持つVector1<T>
を定義してT * T
が可能であればVector1<T> * T
とT * Vector1<T>
ができるようにしたいとします。
struct Vector1<T> {
x: T
}
// T * Tが可能であれば
// Vector1<T> * Tと
// T * Vector1<T>を可能にしたい
しかしVector1<T> * T
は実装できるのですがT * Vector1<T>
は実装できません。
use std::ops;
struct Vector1<T> {
x: T,
}
impl<T> ops::Mul<T> for Vector1<T>
where
T: ops::Mul<T, Output = T>,
{
type Output = Vector1<T>;
fn mul(self, rhs: T) -> Vector1<T> {
Vector1 { x: self.x * rhs }
}
}
impl<T> ops::Mul<Vector1<T>> for T
where
T: ops::Mul<T, Output = T>,
{
type Output = Vector1<T>;
fn mul(self, rhs: Vector1<T>) -> Vector1<T> {
Vector1 { x: self * rhs.x }
}
}
fn main() {}
エラーが出ました。
|
18 | / impl<T> ops::Mul<Vector1<T>> for T
19 | | where
20 | | T: ops::Mul<T, Output = T>,
21 | | {
... |
26 | | }
27 | | }
| |_^ type parameter `T` must be used as the type parameter for some local type
|
= note: only traits defined in the current crate can be implemented for a type parameter
Rust Playgroundでエラーを確認できます。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=7d83e5369d7c227e28e27f408d7d45b7
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント