Вы можете думать об этом, как, else
как в остальной части материала, или другой материал, который не был сделан в цикле.
Решение Джесси Бедера, вероятно, лучшее, но если вам не нравятся имена, которые вам дает typeid (я думаю, что gcc дает вам искаженные имена, например), вы можете сделать что-то вроде:
template<typename T>
struct TypeParseTraits;
#define REGISTER_PARSE_TYPE(X) template <> struct TypeParseTraits<X> \
{ static const char* name; } ; const char* TypeParseTraits<X>::name = #X
REGISTER_PARSE_TYPE(int);
REGISTER_PARSE_TYPE(double);
REGISTER_PARSE_TYPE(FooClass);
// etc...
А затем используйте его как
throw ParseError(TypeParseTraits<T>::name);
EDIT:
Вы также можете объединить два, изменив name
на функцию, которая по умолчанию вызывает typeid (T) .name ()
, а затем специализироваться только на тех случаях, когда это неприемлемо.
Комментарий Мартина Коничека, чтобы полностью отключить выбор элементов самым простым способом:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="false"/>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
Однако, если вам все еще требуется функциональные возможности ListView, такие как возможность выбора элемента, затем вы можете визуально отключить стилизацию выбранного элемента следующим образом:
Вы можете сделать это несколькими способами, изменив ListViewItem's ControlTemplate просто установить стиль (намного проще). Вы можете создать стиль для ListViewItems с помощью ItemContainerStyle и «выключить» фон и кисть границы, когда они выбраны.
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background"
Value="{x:Null}" />
<Setter Property="BorderBrush"
Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
Кроме того,