3#include "IValueConverter.h"
11#pragma warning(disable: 4996)
22 template <
typename TBaseConverter,
typename =
void>
29 template <
typename TBaseConverter>
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);
73 template <
typename TSource,
typename TTarget,
typename =
void>
81 template <
typename TSource,
typename TTarget>
84 typename std::
enable_if<std::is_arithmetic<TSource>::value && std::is_arithmetic<TTarget>::value>::type>
88 virtual TTarget Convert(TSource source)
override
90 return static_cast<TTarget
>(source);
92 virtual TSource ConvertBack(TTarget
target)
override
94 return static_cast<TSource
>(
target);
109 template <
typename T,
typename =
void>
116 template <
typename T>
121 virtual T Convert(T source)
override
125 virtual T ConvertBack(T
target)
override
139 virtual bool Convert(
bool source)
override
143 virtual bool ConvertBack(
bool target)
override
153 template <
typename TSource,
typename =
void>
160 template <
typename TSource>
165 virtual bool Convert(TSource source)
override
167 return source !=
static_cast<TSource
>(0);
169 virtual TSource ConvertBack(
bool target)
override
171 return target ?
static_cast<TSource
>(1) :
static_cast<TSource
>(0);
179 template <
typename TTarget,
typename =
void>
186 template <
typename TTarget>
191 virtual TTarget Convert(
bool source)
override
193 return source ?
static_cast<TTarget
>(1) :
static_cast<TTarget
>(0);
195 virtual bool ConvertBack(TTarget
target)
override
197 return target !=
static_cast<TTarget
>(0);
211 template <
typename TSource,
typename TTarget,
typename =
void>
219 template <
typename TSource,
typename TTarget>
222 typename std::
enable_if<std::is_enum<TSource>::value && std::is_arithmetic<TTarget>::value>::type>
226 virtual TTarget Convert(TSource source)
override
228 return static_cast<TTarget
>(source);
230 virtual TSource ConvertBack(TTarget
target)
override
232 return static_cast<TSource
>(
target);
241 template <
typename TSource,
typename TTarget,
typename =
void>
249 template <
typename TSource,
typename TTarget>
252 typename std::
enable_if<std::is_arithmetic<TSource>::value && std::is_enum<TTarget>::value>::type>
256 virtual TTarget Convert(TSource source)
override
258 return static_cast<TTarget
>(source);
260 virtual TSource ConvertBack(TTarget
target)
override
262 return static_cast<TSource
>(
target);
266 template <
typename TEnum>
269 template <
typename TEnum>
281 : defaultValue(defaultValue)
284 virtual std::wstring Convert(
int source)
override
286 return std::to_wstring(source);
288 virtual int ConvertBack(
const std::wstring &
target)
override
291 bool success = std::swscanf(
target.c_str(), L
"%d", &result) == 1;
292 return success ? result : defaultValue;
306 : defaultValue(defaultValue)
309 virtual std::wstring Convert(
float source)
override
311 std::wstring result(32, L
'\0');
312 int len = std::swprintf(&result[0], result.size(), L
"%g", source);
313 result.resize(
len > 0 ?
len : 0);
316 virtual float ConvertBack(
const std::wstring &
target)
override
319 bool success = std::swscanf(
target.c_str(), L
"%f", &result) == 1;
320 return success ? result : defaultValue;
334 : defaultValue(defaultValue)
337 virtual std::wstring Convert(
double source)
override
339 std::wstring result(32, L
'\0');
340 int len = std::swprintf(&result[0], result.size(), L
"%g", source);
341 result.resize(
len > 0 ?
len : 0);
344 virtual double ConvertBack(
const std::wstring &
target)
override
347 bool success = std::swscanf(
target.c_str(), L
"%lf", &result) == 1;
348 return success ? result : defaultValue;
362 : defaultValue(defaultValue)
365 virtual int Convert(
const std::wstring &source)
override
368 bool success = std::swscanf(source.c_str(), L
"%d", &result) == 1;
369 return success ? result : defaultValue;
371 virtual std::wstring ConvertBack(
int target)
override
373 return std::to_wstring(
target);
387 : defaultValue(defaultValue)
390 virtual float Convert(
const std::wstring &source)
override
393 bool success = std::swscanf(source.c_str(), L
"%f", &result) == 1;
394 return success ? result : defaultValue;
396 virtual std::wstring ConvertBack(
float target)
override
398 std::wstring result(32, L
'\0');
399 int len = std::swprintf(&result[0], result.size(), L
"%g",
target);
400 result.resize(
len > 0 ?
len : 0);
415 : defaultValue(defaultValue)
418 virtual double Convert(
const std::wstring &source)
override
421 bool success = std::swscanf(source.c_str(), L
"%lf", &result) == 1;
422 return success ? result : defaultValue;
424 virtual std::wstring ConvertBack(
double target)
override
426 std::wstring result(32, L
'\0');
427 int len = std::swprintf(&result[0], result.size(), L
"%g",
target);
428 result.resize(
len > 0 ?
len : 0);
445 : defaultValue(defaultValue)
448 virtual std::string Convert(
int source)
override
450 return std::to_string(source);
452 virtual int ConvertBack(
const std::string &
target)
override
455 bool success = std::sscanf(
target.c_str(),
"%d", &result) == 1;
456 return success ? result : defaultValue;
470 : defaultValue(defaultValue)
473 virtual std::string Convert(
float source)
override
475 std::string result(32,
'\0');
476 int len = std::snprintf(&result[0], result.size(),
"%g", source);
477 result.resize(
len > 0 ?
len : 0);
480 virtual float ConvertBack(
const std::string &
target)
override
483 bool success = std::sscanf(
target.c_str(),
"%f", &result) == 1;
484 return success ? result : defaultValue;
498 : defaultValue(defaultValue)
501 virtual std::string Convert(
double source)
override
503 std::string result(32,
'\0');
504 int len = std::snprintf(&result[0], result.size(),
"%g", source);
505 result.resize(
len > 0 ?
len : 0);
508 virtual double ConvertBack(
const std::string &
target)
override
511 bool success = std::sscanf(
target.c_str(),
"%lf", &result) == 1;
512 return success ? result : defaultValue;
526 : defaultValue(defaultValue)
529 virtual int Convert(
const std::string &source)
override
532 bool success = std::sscanf(source.c_str(),
"%d", &result) == 1;
533 return success ? result : defaultValue;
535 virtual std::string ConvertBack(
int target)
override
537 return std::to_string(
target);
551 : defaultValue(defaultValue)
554 virtual float Convert(
const std::string &source)
override
557 bool success = std::sscanf(source.c_str(),
"%f", &result) == 1;
558 return success ? result : defaultValue;
560 virtual std::string ConvertBack(
float target)
override
562 std::string result(32,
'\0');
563 int len = std::snprintf(&result[0], result.size(),
"%g",
target);
564 result.resize(
len > 0 ?
len : 0);
579 : defaultValue(defaultValue)
582 virtual double Convert(
const std::string &source)
override
585 bool success = std::sscanf(source.c_str(),
"%lf", &result) == 1;
586 return success ? result : defaultValue;
588 virtual std::string ConvertBack(
double target)
override
590 std::string result(32,
'\0');
591 int len = std::snprintf(&result[0], result.size(),
"%g",
target);
592 result.resize(
len > 0 ?
len : 0);
608 virtual std::string Convert(
const std::wstring &source)
override
612 virtual std::wstring ConvertBack(
const std::string &
target)
override
624 virtual std::wstring Convert(
const std::string &source)
override
628 virtual std::string ConvertBack(
const std::wstring &
target)
override
640 virtual std::string Convert(
const std::wstring &source)
override
644 virtual std::wstring ConvertBack(
const std::string &
target)
override
656 virtual std::wstring Convert(
const std::string &source)
override
660 virtual std::string ConvertBack(
const std::wstring &
target)
override
窄字符串与双精度浮点数转换器
Definition Converters.h:576
窄字符串与浮点数转换器
Definition Converters.h:548
窄字符串与整数转换器
Definition Converters.h:523
窄字符串与宽字符串转换器
Definition Converters.h:622
布尔值取反转换器
Definition Converters.h:137
布尔值与数值转换器模板声明
Definition Converters.h:180
双精度浮点数与窄字符串转换器
Definition Converters.h:495
双精度浮点数与字符串转换器
Definition Converters.h:331
枚举类型与数值类型转换器模板声明
Definition Converters.h:212
浮点数与窄字符串转换器
Definition Converters.h:467
浮点数与字符串转换器
Definition Converters.h:303
值转换器接口
Definition IValueConverter.h:14
整数与窄字符串转换器
Definition Converters.h:442
整数与字符串转换器
Definition Converters.h:278
数值类型转换器模板声明
Definition Converters.h:74
数值取反转换器模板声明
Definition Converters.h:110
数值与布尔值转换器模板声明
Definition Converters.h:154
数值类型与枚举类型转换器模板声明
Definition Converters.h:242
反向转换器模板声明
Definition Converters.h:23
宽字符串与窄字符串转换器
Definition Converters.h:606
字符串与双精度浮点数转换器
Definition Converters.h:412
字符串与浮点数转换器
Definition Converters.h:384
字符串与整数转换器
Definition Converters.h:359
宽字符串与UTF-8编码窄字符串转换器
Definition Converters.h:638
UTF-8编码窄字符串与宽字符串转换器
Definition Converters.h:654
static std::string ToMultiByteStr(const std::wstring &wstr)
将宽字符串转为窄字符串
static std::wstring ToWideStr(const std::string &str)
将窄字符串转为宽字符串