Я не думаю, что есть хорошее решение без статической отправки. Но документы для ошибки об объектах признаков с методами с общими параметрами фактически обеспечивают решение этой ситуации:
Во-первых, вы помечаете свой метод как where Self: Sized
- это делает его недоступным черты объектов. Может быть, вам не нужен этот метод в контексте объекта trait - тогда все готово.
Если вам нужен метод в контексте объекта признака, вы можете снова использовать его с помощью типоразмера, который содержит объект признака, например, Box
:
struct MyStruct(i32);
pub trait Store {
fn len_of_first_str(&self, paths: impl IntoIterator- >) -> usize
where Self: Sized{
paths.into_iter().next().unwrap().as_ref().len()
}
}
impl Store for Box
{}
fn myfun(arg: Box) -> usize {
arg.len_of_first_str(vec!["string"])
}
обновление 2013 года: IE10 + больше не поддерживает условные комментарии.
Исходный ответ:
Некоторые люди, кажется, смущены, потому что это не отвечает на букву вопроса, только дух - так для разъяснения:
нет такой вещи как селектор браузера. Существуют взломы, которые используют в своих интересах ошибки и/или незначительные сбои в синтаксических анализаторах CSS определенных браузеров, но полагающийся на них собираются для отказа. Существует стандартный, принятый способ иметь дело с этим:
Использование условные комментарии для предназначения для IE только.
Пример:
<!--[if gte IE 8]>
<style>
(your style here)
</style>
<![endif]-->
Все в два <!-->
будет проигнорировано всеми браузерами неIE как комментарий и версии IE, которые являются меньше, чем IE8 пропустит его. Только IE8 и больше обработает его. обновление 2013 года: IE10 + также проигнорирует его как комментарий.
Этот вопрос старый, но ..
Сразу после открывающего тега основного текста ..
<!--[if gte IE 8]>
<div id="IE8Body">
<![endif]-->
Прямо перед закрывающим тегом основного текста ..
<!--[if gte IE 8]>
</div>
<![endif]-->
CSS ..
#IE8Body #nav li ul {}
Вы можете сделать это для всех браузеров IE, использующих условные операторы, ИЛИ нацелены на ВСЕ браузеры, инкапсулируя весь контент в div с именем браузера + версия на стороне сервера
После того, как я попробовал разные методы, я сейчас использую PDF-Toolkit . Он довольно старый, но быстрый, стабильный и надежный. Кроме того, он действительно не должен быть новым, потому что он просто оборачивает утилиты командной строки xpdf .
а также хранение ваших основных стилей и стилей, специфичных для браузера, примерно в одном месте в ваших CSS-файлах. Это также означает, что ваш CSS более ориентирован на будущее (поскольку он не зависит от ошибок, которые могут быть исправлены) и помогает вашему CSS-коду иметь гораздо больше смысла, поскольку вам нужно только увидеть.IE8 #container { .... }
вместо
* html #container { .... }
или хуже!
Взгляните на это:
/* IE8 Standards-Mode Only */
.test { color /*\**/: blue\9 }
/* All IE versions, including IE8 Standards Mode */
.test { color: blue\9 }
(Источник: CSS-хак Дэвида Блума для режима стандартов IE8 )
Хорошо, это не взлом css, а из-за разочарования из-за того, что не смог найти способы настроить таргетинг на ie8 из css, и из-за политики отсутствия конкретных файлов css, я пришлось сделать следующее, что, как я полагаю, может оказаться полезным для кого-то другого:
if (jQuery.browser.version==8.0) {
$(results).css({
'left':'23px',
'top':'-253px'
});
}
Стиль CSS только для IE8:
.divLogRight{color:Blue; color:Red\9; *color:Blue;}
Только IE8 будет красным.
первый Синий: для всех браузеров.
Красный: Только IE6,7,8
Второй Синий: только для IE6,7
Итак, красный = только для IE8.
Для получения очень полного обзора взломов браузера (включая Internet Explorer (IE), Safari, Chrome, iPhone и Opera) посетите эту ссылку: http://paulirish.com/2009/browser-specific-css-hacks/
Я понимаю, что это старый вопрос, но это был первый результат в Google, когда я искал, и я думаю, что нашел лучшее решение, чем предложение с наивысшим рейтингом и то, что решил сделать OP.
#nav li ul:not(.stupidIE) { color:red }
Технически это противоположно тому, что хотел OP, но это просто означает, что вам нужно сначала применить правило, которое вы хотите для IE8, а затем применить его ко всему остальному. Конечно, вы можете поместить что угодно внутри (), если это действительный CSS, который на самом деле ничего не выбирает. IE8 подавляет эту строку и не применяет ее, но предыдущие IE (хорошо, я только проверил IE7, я перестал заботиться об IE6), просто игнорируйте: not () и применяйте объявления. И, конечно же, любой другой браузер (я тестировал Safari 5, Opera 10.5, Firefox 3.6) применяет этот CSS, как и следовало ожидать.
Итак, это решение, я думаю, как и любое другое решение на чистом CSS, предполагает, что если разработчики IE добавят поддержку селектора: not, они также исправят все несоответствия, из-за которых вы нацелились на IE8.