是否可以检查(在 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/