2009-08-28 2 views
2

Как проверить, имеет ли результат правильный тип (int, float, double и т. Д.), А затем бросать и ловить исключение в случае, если это не так?Поймать ошибку типа в C++

Спасибо,

Vlad.

ответ

4

Не могли бы вы дать более подробную информацию о том, что дает вам «результат», вы можете определить, что вам нужно оттуда, и, более вероятно, лучше.

Если вы действительно хотите проверить тип, используйте typeid. Подробнее here

После модели Дэниела редактирования сообщений на самом деле ответить на вопрос о том, за что-то еще ...

С моей другой комментарий:

Вы должны сделать это прежде, чем Вы просто результат. Проверка переполнения после не является хорошей идеей. Делайте проверку по номерам, прежде чем добавить, чтобы увидеть, если они будут переливаться, или ограничить вход быть меньше половины максимального значения типа

+0

Спасибо за ваши ответы, Адам. – Vlad

4

Невозможно узнать, что во время выполнения с C++. Это были бы ошибки времени компиляции.

Чтобы ответить на второй вопрос, вам необходимо вручную проверить переполнение или переполнение буфера или использовать более подходящий тип данных.

+4

+1, но это как раз наоборот - там почти нет way * not * знать, что во время выполнения, потому что иначе код не будет компилироваться ;-) –

+0

За исключением случаев использования экземпляра шаблона, где параметр шаблона может быть любым классом/типом вообще, даже тот, который не существовал, когда шаблон был написан. – suszterpatt

+2

Но шаблоны не во время исполнения. Они также генерируются во время компиляции. –

0

Ближе всего вы получите dynamic_cast.

+2

dynamic_cast не работает для встроенных типов. Он работает только для ссылок/указателей на полиморфные типы. –

+0

Вот почему я сказал, что * ближайший * вы получите dynamic_cast (не «ответ dynamic_cast», обратите внимание на разницу). Я упомянул dynamic_cast, потому что не был уверен, что OP запрашивал * просто * встроенные или для большего набора типов. –

Смежные вопросы