Я хотел бы иметь несколько версий функции, оптимизированной для типа ее аргументов, и Rust называть подходящую в зависимости от контекста.Как реализовать специализированные версии общей функции?
В моем случае все аргументы имеют один и тот же тип, и все они эквивалентны, поэтому лучше избегать аргумента self
.
trait Foo<T> {
fn foo(a: T, b: T, c: T);
}
impl Foo<i32> {
fn foo(a: i32, b: i32, c: i32) {}
}
impl Foo<i16> {
fn foo(a: i16, b: i16, c: i16) {}
}
fn main() {
Foo::foo(1i32,2,3);
Foo::foo(1i16,2,3);
}
но Rust требует аннотации типов:
error: type annotations required: cannot resolve
_ : Foo<i32>
[E0283]
Могу ли я избегать предоставления аннотацию типа на месте вызова? Если мне нужно, как это сделать?
Любая текущая специализация общей функции - это причуда, которая, вероятно, на самом деле не предназначена для работы (т. Е. Это ошибка). [Истинная специализация] (https://github.com/rust-lang/rfcs/pull/1210) - это предлагаемая, но не реализованная функция. – huon
@huon: Разве это не ответ, как временный? –