Помимо подхода Box
, в определении черты можно определить общий тип. Этот метод ограничен реализуемым типом и использует статическую диспетчеризацию, но ваша черта не нарушит правила безопасности объекта.
trait Store<'a, I>
where
I: IntoIterator<Item = &'a str>,
{
fn query_valid_paths(&mut self, iter: I) -> Vec<String>;
}
impl<'a, I> Store<'a, I> for ()
where
I: IntoIterator<Item = &'a str>,
{
fn query_valid_paths(&mut self, iter: I) -> Vec<String> {
iter.into_iter().map(|x| x.to_string()).collect()
}
}
// Store is object safe
struct _Bar<'a, I> {
vec: Vec<Box<dyn Store<'a, I>>>,
}
fn main() {
let vec_of_strings = vec!["one", "two", "three"];
println!("{:?}", ().query_valid_paths(vec_of_strings));
}
Чтобы не вступать во владение, вместо этого вы можете использовать vec_of_strings.iter().cloned()
.
Я - настоящий идиот. Это - то, как это появляется в дисплее, который плагин Ecliplse предоставляет бок о бок XML-редактор. Когда я на самом деле разрабатываю проект и выполнил его на устройстве, он отобразил все правильно.
Иронически у меня была точно противоположная проблема с ImageView - я не мог получить ее, выровнял по левому краю то независимо от того, что я попробовал. В этом случае я использовал layout_width="fill_parent"
.
Посмотрите мой вопрос здесь: расположение Android - проблема выравнивания с ImageView