Подтвердить @MooingDuck и @Casey
template
decltype(auto) if_else_impl(std::true_type, FN1 &&fn1, FN2 &&, Args&&... args)
{
return fn1(std::forward(args)...);
}
template
decltype(auto) if_else_impl(std::false_type, FN1 &&, FN2 &&fn2, Args&&... args)
{
return fn2(std::forward(args)...);
}
#define static_if(...) if_else_impl(__VA_ARGS__, *this)
И так же просто:
static_if(do_it,
[&](auto& self){ return 1; },
[&](auto& self){ return self.sum(2); }
);
Работает как static if - компилятор go только для «истинной» ветви.
PS Вы должны иметь self = *this
и делать из него вызовы членов, из-за ошибки gcc . Если у вас есть вложенные лямбда-вызовы, вы не можете использовать this->
вместо self.
Просто потребность добавить пространство:
.area2 .item
{
...
}
К вашему сведению, когда Вы определяете правило как Вы, сделал выше, с двумя селекторами, объединенными в цепочку вместе:
.area1.item
{
color:red;
}
Это означает:
Применяют этот стиль к любому элементу, который имеет и класс "area1" и "объект".
, такие как:
<div class="area1 item">
Печально это не работает в IE6, но это - то, что это означает.
Ваша проблема, кажется, недостающее пространство между Вашими двумя классами в CSS:
.area1.item
{
color:red;
}
Должен быть
.area1 .item
{
color:red;
}
Вы хотите вынудить только детей быть выбранными? http://css.maxdesign.com.au/selectutorial/selectors_child.htm
.area1
{
border:1px solid black;
}
.area1>.item
{
color:red;
}
.area2
{
border:1px solid blue;
}
.area2>.item
{
color:blue;
}
Просто поместите пространство между .area1 и .item, например:
.area1 .item
{
color:red;
}
этот стиль относится к элементам с объектом класса в элементе с классом area1.
Просто поместите пространство между своими классами
.area1 .item
{
...
}
, Вот очень хорошая ссылка для Селекторы CSS .
у Вас может также быть два класса в элементе как это
<div class = "item1 item2 item3"></div>
, каждый объект в классе является своим собственным классом
.item1 {
background-color:black;
}
.item2 {
background-color:green;
}
.item3 {
background-color:orange;
}
Это - магистраль CSS, "каскада" в Расположение каскадом Таблицы стилей.
, Если Вы пишете свои правила CSS в одной строке, она помогает видеть структуру:
.area1 .item { color:red; }
.area2 .item { color:blue; }
.area2 .item span { font-weight:bold; }
Используя несколько классов также хорошее промежуточное/усовершенствованное использование CSS, к сожалению, существует известная ошибка IE6, которая ограничивает это использование при написании перекрестного кода браузера:
<div class="area1 larger"> .... </div>
.area1 { width:200px; }
.area1.larger { width:300px; }
IE6 ИГНОРИРУЕТ первый селектор в правиле мультикласса, таким образом, IE6 на самом деле применяет правило .area1.larger как
/*.area1*/.larger { ... }
Значение, что это будет влиять на ВСЕ .larger элементы.
Это - очень противная и неудачная ошибка (один из многих) в IE6, который вынуждает Вас к в значительной степени, никогда не используют ту функцию CSS, если Вы хотите один чистый перекрестный браузер файл CSS.
решение затем состоит в том, чтобы использовать префиксы имени класса CSS, чтобы не сталкиваться с универсальными именами классов:
.area1 { ... }
.area1.area1Larger { ... }
.area2.area2Larger { ... }
May также использует всего один класс, но тот способ, которым можно сохранить CSS в логике, которую Вы предназначили при знании, что .area1Larger только влияет на .area1, и т.д.
Класс, который вы применяете к div, можно использовать как точку отсчета для стилизации элементов с этим div, например.
<div class="area1">
<table>
<tr>
<td class="item">Text Text Text</td>
<td class="item">Text Text Text</td>
</tr>
</table>
</div>
.area1 { border:1px solid black; }
.area1 td { color:red; } /* This will effect any TD within .area1 */
Чтобы быть суперсемантичным, вам следует перенести класс в таблицу.
<table class="area1">
<tr>
<td>Text Text Text</td>
<td>Text Text Text</td>
</tr>
</table>