3#include "IValueConverter.h"
11#pragma warning(disable: 4996)
22 template <
typename TBaseConverter,
typename =
void>
29 template <
typename TBaseConverter>
32 typename std::enable_if<
35 typename std::decay<typename TBaseConverter::TSourceParam>::type,
36 typename std::decay<typename TBaseConverter::TTargetParam>::type>,
37 TBaseConverter>::value>::type>
39 typename std::decay<typename TBaseConverter::TTargetParam>::type,
40 typename std::decay<typename TBaseConverter::TSourceParam>::type>
43 using TSourceParam =
typename TBaseConverter::TTargetParam;
44 using TTargetParam =
typename TBaseConverter::TSourceParam;
45 using TSource =
typename std::decay<TSourceParam>::type;
46 using TTarget =
typename std::decay<TTargetParam>::type;
48 template <
typename... Args>
50 : baseConverter(std::forward<Args>(args)...)
53 virtual TTarget Convert(TSourceParam source)
override
55 return baseConverter.ConvertBack(source);
57 virtual TSource ConvertBack(TTargetParam target)
override
59 return baseConverter.Convert(target);
63 TBaseConverter baseConverter;
76 typename std::enable_if<std::is_arithmetic<TSource>::value && std::is_arithmetic<TTarget>::value,
int>::type = 0>
80 virtual TTarget Convert(TSource source)
override
82 return static_cast<TTarget
>(source);
84 virtual TSource ConvertBack(TTarget target)
override
86 return static_cast<TSource
>(target);
103 typename std::enable_if<std::is_arithmetic<T>::value,
int>::type = 0>
107 virtual T Convert(T source)
override
111 virtual T ConvertBack(T target)
override
125 virtual bool Convert(
bool source)
override
129 virtual bool ConvertBack(
bool target)
override
141 typename std::enable_if<std::is_arithmetic<TSource>::value,
int>::type = 0>
145 virtual bool Convert(TSource source)
override
147 return source !=
static_cast<TSource
>(0);
149 virtual TSource ConvertBack(
bool target)
override
151 return target ?
static_cast<TSource
>(1) :
static_cast<TSource
>(0);
161 typename std::enable_if<std::is_arithmetic<TTarget>::value,
int>::type = 0>
165 virtual TTarget Convert(
bool source)
override
167 return source ?
static_cast<TTarget
>(1) :
static_cast<TTarget
>(0);
169 virtual bool ConvertBack(TTarget target)
override
171 return target !=
static_cast<TTarget
>(0);
187 : defaultValue(defaultValue)
190 virtual std::wstring Convert(
int source)
override
192 return std::to_wstring(source);
194 virtual int ConvertBack(
const std::wstring &target)
override
197 bool success = std::swscanf(target.c_str(), L
"%d", &result) == 1;
198 return success ? result : defaultValue;
212 : defaultValue(defaultValue)
215 virtual std::wstring Convert(
float source)
override
217 std::wstring result(32, L
'\0');
218 int len = std::swprintf(&result[0], result.size(), L
"%g", source);
219 result.resize(len > 0 ? len : 0);
222 virtual float ConvertBack(
const std::wstring &target)
override
225 bool success = std::swscanf(target.c_str(), L
"%f", &result) == 1;
226 return success ? result : defaultValue;
240 : defaultValue(defaultValue)
243 virtual std::wstring Convert(
double source)
override
245 std::wstring result(32, L
'\0');
246 int len = std::swprintf(&result[0], result.size(), L
"%g", source);
247 result.resize(len > 0 ? len : 0);
250 virtual double ConvertBack(
const std::wstring &target)
override
253 bool success = std::swscanf(target.c_str(), L
"%lf", &result) == 1;
254 return success ? result : defaultValue;
268 : defaultValue(defaultValue)
271 virtual int Convert(
const std::wstring &source)
override
274 bool success = std::swscanf(source.c_str(), L
"%d", &result) == 1;
275 return success ? result : defaultValue;
277 virtual std::wstring ConvertBack(
int target)
override
279 return std::to_wstring(target);
293 : defaultValue(defaultValue)
296 virtual float Convert(
const std::wstring &source)
override
299 bool success = std::swscanf(source.c_str(), L
"%f", &result) == 1;
300 return success ? result : defaultValue;
302 virtual std::wstring ConvertBack(
float target)
override
304 std::wstring result(32, L
'\0');
305 int len = std::swprintf(&result[0], result.size(), L
"%g", target);
306 result.resize(len > 0 ? len : 0);
321 : defaultValue(defaultValue)
324 virtual double Convert(
const std::wstring &source)
override
327 bool success = std::swscanf(source.c_str(), L
"%lf", &result) == 1;
328 return success ? result : defaultValue;
330 virtual std::wstring ConvertBack(
double target)
override
332 std::wstring result(32, L
'\0');
333 int len = std::swprintf(&result[0], result.size(), L
"%g", target);
334 result.resize(len > 0 ? len : 0);
351 : defaultValue(defaultValue)
354 virtual std::string Convert(
int source)
override
356 return std::to_string(source);
358 virtual int ConvertBack(
const std::string &target)
override
361 bool success = std::sscanf(target.c_str(),
"%d", &result) == 1;
362 return success ? result : defaultValue;
376 : defaultValue(defaultValue)
379 virtual std::string Convert(
float source)
override
381 std::string result(32,
'\0');
382 int len = std::snprintf(&result[0], result.size(),
"%g", source);
383 result.resize(len > 0 ? len : 0);
386 virtual float ConvertBack(
const std::string &target)
override
389 bool success = std::sscanf(target.c_str(),
"%f", &result) == 1;
390 return success ? result : defaultValue;
404 : defaultValue(defaultValue)
407 virtual std::string Convert(
double source)
override
409 std::string result(32,
'\0');
410 int len = std::snprintf(&result[0], result.size(),
"%g", source);
411 result.resize(len > 0 ? len : 0);
414 virtual double ConvertBack(
const std::string &target)
override
417 bool success = std::sscanf(target.c_str(),
"%lf", &result) == 1;
418 return success ? result : defaultValue;
432 : defaultValue(defaultValue)
435 virtual int Convert(
const std::string &source)
override
438 bool success = std::sscanf(source.c_str(),
"%d", &result) == 1;
439 return success ? result : defaultValue;
441 virtual std::string ConvertBack(
int target)
override
443 return std::to_string(target);
457 : defaultValue(defaultValue)
460 virtual float Convert(
const std::string &source)
override
463 bool success = std::sscanf(source.c_str(),
"%f", &result) == 1;
464 return success ? result : defaultValue;
466 virtual std::string ConvertBack(
float target)
override
468 std::string result(32,
'\0');
469 int len = std::snprintf(&result[0], result.size(),
"%g", target);
470 result.resize(len > 0 ? len : 0);
485 : defaultValue(defaultValue)
488 virtual double Convert(
const std::string &source)
override
491 bool success = std::sscanf(source.c_str(),
"%lf", &result) == 1;
492 return success ? result : defaultValue;
494 virtual std::string ConvertBack(
double target)
override
496 std::string result(32,
'\0');
497 int len = std::snprintf(&result[0], result.size(),
"%g", target);
498 result.resize(len > 0 ? len : 0);
514 virtual std::string Convert(
const std::wstring &source)
override
518 virtual std::wstring ConvertBack(
const std::string &target)
override
530 virtual std::wstring Convert(
const std::string &source)
override
534 virtual std::string ConvertBack(
const std::wstring &target)
override
546 virtual std::string Convert(
const std::wstring &source)
override
550 virtual std::wstring ConvertBack(
const std::string &target)
override
562 virtual std::wstring Convert(
const std::string &source)
override
566 virtual std::string ConvertBack(
const std::wstring &target)
override
窄字符串与双精度浮点数转换器
Definition Converters.h:482
窄字符串与浮点数转换器
Definition Converters.h:454
窄字符串与整数转换器
Definition Converters.h:429
窄字符串与宽字符串转换器
Definition Converters.h:528
布尔值取反转换器
Definition Converters.h:123
布尔值与数值转换器,true转换为1,false转换为0
Definition Converters.h:163
双精度浮点数与窄字符串转换器
Definition Converters.h:401
双精度浮点数与字符串转换器
Definition Converters.h:237
浮点数与窄字符串转换器
Definition Converters.h:373
浮点数与字符串转换器
Definition Converters.h:209
值转换器接口
Definition IValueConverter.h:20
整数与窄字符串转换器
Definition Converters.h:348
整数与字符串转换器
Definition Converters.h:184
数值类型转换器,将源数值类型转换为目标数值类型
Definition Converters.h:78
数值取反转换器
Definition Converters.h:105
数值与布尔值转换器,非零数值转换为true,零数值转换为false
Definition Converters.h:143
反向转换器模板声明
Definition Converters.h:23
宽字符串与窄字符串转换器
Definition Converters.h:512
字符串与双精度浮点数转换器
Definition Converters.h:318
字符串与浮点数转换器
Definition Converters.h:290
字符串与整数转换器
Definition Converters.h:265
宽字符串与UTF-8编码窄字符串转换器
Definition Converters.h:544
UTF-8编码窄字符串与宽字符串转换器
Definition Converters.h:560
static std::string ToMultiByteStr(const std::wstring &wstr, bool utf8=false)
将宽字符串转为窄字符串
static std::wstring ToWideStr(const std::string &str, bool utf8=false)
将窄字符串转为宽字符串