xtd - Reference Guide  0.1.0
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
Loading...
Searching...
No Matches
is.h
Go to the documentation of this file.
1
4#pragma once
5#include <any>
6#include <limits>
7#include <memory>
8#include <stdexcept>
9#include "parse.h"
10#include "types.h"
11#include "unused.h"
12
14namespace xtd {
16 template<typename value_t>
17 inline bool is(bool value) {return false;}
18 template<typename value_t>
19 inline bool is(decimal_t value) {return false;}
20 template<typename value_t>
21 inline bool is(double value) {return false;}
22 template<typename value_t>
23 inline bool is(float value) {return false;}
24 template<typename value_t>
25 inline bool is(int8_t value) {return false;}
26 template<typename value_t>
27 inline bool is(int16_t value) {return false;}
28 template<typename value_t>
29 inline bool is(int32_t value) {return false;}
30 template<typename value_t>
31 inline bool is(int64_t value) {return false;}
32 template<typename value_t>
33 inline bool is(llong_t value) {return false;}
34 template<typename value_t>
35 inline bool is(uint8_t value) {return false;}
36 template<typename value_t>
37 inline bool is(uint16_t value) {return false;}
38 template<typename value_t>
39 inline bool is(uint32_t value) {return false;}
40 template<typename value_t>
41 inline bool is(uint64_t value) {return false;}
42 template<typename value_t>
43 inline bool is(ullong_t value) {return false;}
45
59 template<>
60 inline bool is<bool>(bool value) {
61 return true;
62 }
63
77 template<>
78 inline bool is<decimal_t>(decimal_t value) {
79 return true;
80 }
81
95 template<>
96 inline bool is<double>(double value) {
97 return true;
98 }
99
113 template<>
114 inline bool is<float>(float value) {
115 return true;
116 }
117
131 template<>
132 inline bool is<int8_t>(int8_t value) {
133 return true;
134 }
135
149 template<>
150 inline bool is<int16_t>(int16_t value) {
151 return true;
152 }
153
167 template<>
168 inline bool is<int32_t>(int32_t value) {
169 return true;
170 }
171
185 template<>
186 inline bool is<int64_t>(int64_t value) {
187 return true;
188 }
189
203 template<>
204 inline bool is<llong_t>(llong_t value) {
205 return true;
206 }
207
221 template<>
222 inline bool is<uint8_t>(uint8_t value) {
223 return true;
224 }
225
239 template<>
240 inline bool is<uint16_t>(uint16_t value) {
241 return true;
242 }
243
257 template<>
258 inline bool is<uint32_t>(uint32_t value) {
259 return true;
260 }
261
275 template<>
276 inline bool is<uint64_t>(uint64_t value) {
277 return true;
278 }
279
293 template<>
294 inline bool is<ullong_t>(ullong_t value) {
295 return true;
296 }
297
304 template<typename type_t>
305 bool is(std::any value) {
306 try {
307 any_cast<type_t>(value);
308 return true;
309 } catch (const std::bad_cast&) {
310 return false;
311 }
312 }
313
320 template<>
321 inline bool is<std::any>(std::any value) {
322 return true;
323 }
324
331 template<typename type_t, typename param_t>
332 bool is(const param_t* value) {
333 try {
334 if (value == nullptr) return false;
335 return dynamic_cast<const type_t*>(value) != nullptr;
336 } catch (const std::bad_cast&) {
337 return false;
338 }
339 }
340
347 template<typename type_t, typename param_t>
348 bool is(const param_t& value) {
349 return is<type_t>(&value);
350 }
351
358 template<typename type_t, typename param_t>
359 bool is(param_t* value) {
360 try {
361 if (value == nullptr) return false;
362 return dynamic_cast<type_t*>(value) != nullptr;
363 } catch (const std::bad_cast&) {
364 return false;
365 }
366 }
367
374 template<typename type_t, typename param_t>
375 bool is(param_t& value) {
376 return is<type_t>(&value);
377 }
378
385 template<typename new_type_t, typename current_type_t>
386 bool is(std::shared_ptr<current_type_t>& value) {
387 try {
388 unused_(dynamic_pointer_cast<new_type_t>(value));
389 return true;
390 } catch (const std::exception&) {
391 return false;
392 }
393 return false;
394 }
395}
#define unused_
It may be used to suppress the "unused variable" or "unused local typedefs" compiler warnings when th...
Definition: unused.h:31
bool is< uint64_t >(uint64_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:276
bool is< ullong_t >(ullong_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:294
bool is< uint16_t >(uint16_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:240
bool is< float >(float value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:114
bool is< int64_t >(int64_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:186
bool is< decimal_t >(decimal_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:78
bool is< uint8_t >(uint8_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:222
bool is(std::any value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:305
bool is< int32_t >(int32_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:168
bool is< int8_t >(int8_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:132
bool is< uint32_t >(uint32_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:258
bool is< double >(double value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:96
bool is< llong_t >(llong_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:204
bool is< bool >(bool value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:60
bool is< std::any >(std::any value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:321
bool is< int16_t >(int16_t value)
Checks if the result of an expression is compatible with a given type.
Definition: is.h:150
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::parse methods.
Contains xtd fundamental types.
Contains unused_ keyword.