1 |
#pragma once |
2 |
|
3 |
#include <typeinfo> |
4 |
|
5 |
bool is_integral (std::type_info const &ti); |
6 |
bool is_signed (std::type_info const &ti); |
7 |
bool is_floating_point (std::type_info const &ti); |
8 |
|
9 |
template<typename T> |
10 |
T runtime_cast (void const *ptr, std::type_info const &ti); |
11 |
|
12 |
template<> inline char runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast< signed long> (ptr, ti); } |
13 |
template<> inline signed char runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast< signed long> (ptr, ti); } |
14 |
template<> inline unsigned char runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast<unsigned long> (ptr, ti); } |
15 |
template<> inline signed short runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast< signed long> (ptr, ti); } |
16 |
template<> inline unsigned short runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast<unsigned long> (ptr, ti); } |
17 |
template<> inline signed int runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast< signed long> (ptr, ti); } |
18 |
template<> inline unsigned int runtime_cast (void const *ptr, std::type_info const &ti) { return runtime_cast<unsigned long> (ptr, ti); } |