SimpleWindow
载入中...
搜索中...
未找到
BindingCastHelper.h
1#pragma once
2
3#include "Variant.h"
4
5namespace sw
6{
19 template <typename TSource, typename TTarget, typename = void>
20 struct BindingCastHelper : std::false_type {
21 };
22
28 template <typename TSource, typename TTarget>
30 TSource, TTarget,
32 std::is_same<TSource, TTarget>::value>::type>
33 : std::true_type //
34 {
40 static TTarget Convert(const TSource &value)
41 {
42 return value;
43 }
44
50 static TTarget Convert(TSource &&value)
51 {
52 return std::move(value);
53 }
54
60 static TSource ConvertBack(const TTarget &value)
61 {
62 return value;
63 }
64
70 static TSource ConvertBack(TTarget &&value)
71 {
72 return std::move(value);
73 }
74 };
75
81 template <typename TSource, typename TTarget>
83 TSource, TTarget,
85 !std::is_same<TSource, TTarget>::value &&
86 _IsStaticCastable<TSource, TTarget>::value &&
87 _IsStaticCastable<TTarget, TSource>::value>::type>
88 : std::true_type //
89 {
95 static TTarget Convert(const TSource &value)
96 {
97 return static_cast<TTarget>(value);
98 }
99
105 static TTarget Convert(TSource &&value)
106 {
107 return static_cast<TTarget>(std::move(value));
108 }
109
115 static TSource ConvertBack(const TTarget &value)
116 {
117 return static_cast<TSource>(value);
118 }
119
125 static TSource ConvertBack(TTarget &&value)
126 {
127 return static_cast<TSource>(std::move(value));
128 }
129 };
130
135 template <typename TSource>
137 TSource, Variant,
138 typename std::enable_if<!std::is_same<TSource, Variant>::value>::type> : std::true_type //
139 {
145 static Variant Convert(const TSource &value)
146 {
147 return Variant{value};
148 }
149
155 static Variant Convert(TSource &&value)
156 {
157 return Variant{std::move(value)};
158 }
159
166 static TSource ConvertBack(const Variant &value)
167 {
168 return value.DynamicCast<TSource>();
169 }
170 };
171
176 template <typename TTarget>
178 Variant, TTarget,
179 typename std::enable_if<!std::is_same<TTarget, Variant>::value>::type> : std::true_type //
180 {
187 static TTarget Convert(const Variant &value)
188 {
189 return value.DynamicCast<TTarget>();
190 }
191
197 static Variant ConvertBack(const TTarget &value)
198 {
199 return Variant{value};
200 }
201
207 static Variant ConvertBack(TTarget &&value)
208 {
209 return Variant{std::move(value)};
210 }
211 };
212}
值转换器接口
Definition IValueConverter.h:14
通用变体类型容器,类型擦除地持有任意类型对象
Definition Variant.h:36
T & DynamicCast()
将Variant对象动态转换为指定类型的引用
Definition Variant.h:375
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
static TTarget Convert(const TSource &value)
将源属性值转换为目标属性值
Definition BindingCastHelper.h:40
static TSource ConvertBack(TTarget &&value)
将目标属性值移动转换回源属性值
Definition BindingCastHelper.h:70
static TTarget Convert(TSource &&value)
将源属性值移动转换为目标属性值
Definition BindingCastHelper.h:50
static TSource ConvertBack(const TTarget &value)
将目标属性值转换回源属性值
Definition BindingCastHelper.h:60
static Variant Convert(const TSource &value)
将源属性值装箱为Variant
Definition BindingCastHelper.h:145
static Variant Convert(TSource &&value)
将源属性值移动装箱为Variant
Definition BindingCastHelper.h:155
static TSource ConvertBack(const Variant &value)
从Variant中动态转换回源属性值类型
Definition BindingCastHelper.h:166
static Variant ConvertBack(TTarget &&value)
将目标属性值移动转换回Variant
Definition BindingCastHelper.h:207
static TTarget Convert(const Variant &value)
从Variant中动态转换为目标属性值类型
Definition BindingCastHelper.h:187
static Variant ConvertBack(const TTarget &value)
将目标属性值转换回Variant
Definition BindingCastHelper.h:197
Binding默认转换辅助模板
Definition BindingCastHelper.h:20