typedef typename Tail::inUnion dummy;
Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.
template
struct Contains; template struct Contains > { enum { result = Contains ::result }; }; template struct Contains > { enum { result = true }; }; template struct Contains { enum { result = false }; }; PS: Посмотрите на Boost :: Variant
PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design
Вместо того, чтобы поместить (как в Ваш пример) кнопку непосредственно на холсте, Вы могли поместить stackpanel на холст, горизонтально выровненный, и помещать эти две кнопки там.
Как так:
<Canvas>
<StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal">
<Button>Button 1</Button><Button>Button 2</Button>
</StackPanel>
</Canvas>
я думаю, что это довольно гибко, когда Вы используете больше чем 1 расположение в форме, и можно создать в значительной степени любую конфигурацию, которую Вы хотите.
Хороший вопрос. Насколько я знаю, у нас должна быть различная пользовательская панель для получения этой функции. Так как WPF основан на Визуальной Иерархии нет никакого способа иметь этот вид Плоской структуры для элементов в платформе.
, Но Вот прием, чтобы сделать это. Место Ваши элементы в том же положении и дают относительное смещение при помощи RenderTransform. TranslateTransform. Таким образом, X и Y Вашего TranslateTransfrom всегда будут relatuve к другому элементу.