| 1 |
sf-pippijn |
1.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); } |