c++ - 检查(原始)类型在 C++ 中是否可转换

标签 c++ casting c++03

是否可以检查(在 C++ 中)类型是否可转换(隐式或显式)? std 中是否有内容,或者是否可以像 C# ( C# same Question ) 中那样编写一个函数?

我想对类型而不是类型的实例执行此检查。

我不确定 C++ 中的类型系统。 C# 或 Java 中有类似 Type 类的东西吗? typeid(int) 是我找到的最近的。我可以将类型存储到变量吗?仔细阅读提示将不胜感激。

例如:

bool isCastable(false);
bool withoutLoss(true);
isCastable = isCastableFromTo(typeid(int), typeid(__int64), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(short), withoutLoss); //false
isCastable = isCastableFromTo(typeid(int), typeid(double), withoutLoss); //true
isCastable = isCastableFromTo(typeid(double), typeid(int), withoutLoss); //false
isCastable = isCastableFromTo(typeid(string), typeid(int), withoutLoss); //false

withoutLoss = false;
isCastable = isCastableFromTo(typeid(int), typeid(__int64), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(short), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(double), withoutLoss); //true
isCastable = isCastableFromTo(typeid(double), typeid(int), withoutLoss); //true
isCastable = isCastableFromTo(typeid(string), typeid(int), withoutLoss); //false

最佳答案

在 C++11 中,您可以使用 std::is_convertible ( reference )。这将检查是否可以进行隐式转换。它不考虑转换是否有损。


例子:

#include <type_traits>
bool f_to_i = std::is_convertible<float,int>::value; // true
bool i64_to_i = std::is_convertible<int64_t,int>::value; // true
bool str_to_i = std::is_convertible<std::string,int>::value; // false

关于c++ - 检查(原始)类型在 C++ 中是否可转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762224/

相关文章:

c++ - 静态类成员是否保证在调用 `main` 之前被初始化?

c++ - Visual Studio 2010 中是否有 64 位的#define?

java - 将类(class)转换到自制类(class)

C# 泛型 : cannot convert from 'concrete class' to 'interface' error

c++ - isSet() 或 operator void*() 或 explicit operator bool() 或其他?

c++ - 错误 : unitialized member with const type c++

c++ - 如何制作模板参数

c++ - Gtk/Gtkmm 动态滚动

c++ - 当涉及分配器时,是否有类似于 copy-and-swap 习惯用法的东西?

javascript - 可以在 TS 中将 undefined 强制转换为 void 吗?