- Получил прекрасное сообщение об ошибке:
error: mismatched types: expected `&fn(i32, i32) -> i32 {foo::plus}`, found `&fn(i32, i32) -> i32 {foo::minus}` let v: &[&Fn(i32, i32) -> i32] = [&plus, &minus];
На самом деле, там проблема в другом месте -- массив не приведен к срезу ( забыл & перед [), что видно из след. сообщения об ошибке. -
Из примера использования биндингов к Qt
QString::new7("Cannot load %1.").arg12(&fileName, 0, &QChar::new9(' ' as i8))
Разные версии функций Qt, отличающиеся типов аргуменов, при генерации биндингов получили индексы. Перегрузка функции по типу аргументов не то чтобы невозможна, но требует некоторой работы -- нужен параметризируемый (generic) трейт ("интерфейс", аналог class из Хаскеля или protocol из Свифта):trait Overload<X> { fn call_with(self, arg: X) -> (); } struct Foo; impl Overload<u8> for Foo { fn call_with(self, arg: u8) { } } impl Overload<i32> for Foo { fn call_with(self, arg: i32) { } }
2015-03-17
немного за rust
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий