Можно ли проверить (в C ++), являются ли типы приводимыми (неявно или явно)? Есть ли что-то в std
или можно ли написать функцию, как в C # (C # тот же вопрос)?
Я хочу выполнить эту проверку для типов, а не для экземпляров типа.
Я не уверен насчет системы типов в C ++. Есть ли что-то вроде класса Type
в C # или Java? 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
<type_traits>
- это путь. Если вы не хотите использовать C ++ 11 (почему?!?!), Повторно реализуйте этот заголовок, посмотрев на стандартные реализации библиотеки. Это потребует немало бездумного копирования и вставки, поэтому вам следует действительно использовать версию C ++ 11. - person Konrad Rudolph   schedule 21.05.2014