Форум программистов, компьютерный форум CyberForum.ru

Узнать тип переменной - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
09.07.2012, 00:47     Узнать тип переменной #1
1) Как узнать тип переменной?

Что то типо такого возможно?: if ( getType(var) == "int")

2) Подскажите способы конвертирования переменных. (из int в string, наоборот, и тд...)

3) Как сделать проверку: если в textbox введена цифра, то делать что то...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 00:47     Узнать тип переменной
Посмотрите здесь:

C++ тип переменной
template, узнать тип переменной C++
C++ тип переменной WIN32_FIND_DATA
Восьмибитный тип переменной (что за тип, но не BYTE и не CHAR? C++
любой тип переменной C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
enk
 Аватар для enk
45 / 44 / 7
Регистрация: 16.06.2012
Сообщений: 177
09.07.2012, 01:22     Узнать тип переменной #2
1. Как определить тип переменной?
2. itoa
3. sorry, dunno
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 02:31     Узнать тип переменной #3
Flaker, да легко сделай свич на размер переменной
sizeof(val) - на скрине размер в байтах каждой переменной
В принципе всё что по 1-му байту - это целые
(int и char взаимопереходящи)
2-м байтам - это целые
4 - ри надо разбирать
8 - дабл
10 - длинный дабл
Миниатюры
Узнать тип переменной  
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
09.07.2012, 02:51  [ТС]     Узнать тип переменной #4
Да нее... Это же ужасно! Свитч, что бы определить тип переменной... там вон 5 типов на 2 байта, как тут определишь? Нормальной функции, которая вернеет строку с названием типа переменной нету чтоль? :|
enk скинул ссылку на тему, в которой говорится, что определяют тип переменной обычно с помощью typeid, но я не понял, что и как typeid возвращает, и как его вобще использовать.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.07.2012, 06:30     Узнать тип переменной #5
1) Наверное, можно как-то так:

C++
1
if (typeid(var) == typeid(int))
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
09.07.2012, 07:04     Узнать тип переменной #6
А я не понял, для чего это нужно... Ладно бы еще - тип объекта. Но для чего может понадобиться определение типа переменной в рантайме - не представляю. Если бы в С++ был бы тип variant (как в VB/VBA), который мог хранить переменную любого типа - тогда, конечно. В общем автор темы лично меня заинтриговал.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
09.07.2012, 09:29     Узнать тип переменной #7
-=ЮрА=-, конкретный размер переменных стандартом не определен, все зависит от используемого компилятора и архитектуры.
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 09:53     Узнать тип переменной #8
Цитата Сообщение от kazak Посмотреть сообщение
-=ЮрА=-, конкретный размер переменных стандартом не определен, все зависит от используемого компилятора и архитектуры.
- когда пишем на конкретном компиляторе на его величины и ориентируемся, притом всегда можно делать сравнение
C++
1
2
3
4
5
if(sizeof(val) == sizeof(char))
{}
else
if(sizeof(val) == sizeof(double))
{}
и будет работать всегда правильно на любой совместимой платформе

Не по теме:

Вот парни сами посудите число 2 - это может быть и int и short и long (конечно же + signed unsigned). Ну вот кто из вас отгадает какой тип я загадал?Ну вот тоже самое просите компилятор сделать - можно лишь получить ориентировочный тип.
Притом мне ещё хочется посмотреть на тот алгоритм которому нужен тип переменно - что с типом делать солить что ли?



Цитата Сообщение от Flaker Посмотреть сообщение
Как сделать проверку: если в textbox введена цифра, то делать что то...
- да очень просто в ctype есть такая функция isdigit теперь немного поняв к чему своидиться задача (посомтреть в поле ввода ввели строку или число)скажу эта задача не требует узнавания типа переменной. Всё проще, показую на примере EditBox-а с типом CString (с конкретным типом скажем double данный контрол имеет защиту от некорректного ввода см сюда http://www.cyberforum.ru/blogs/34326/blog279.html смотрим проект MFCEnterDouble)
Так вот вернусь к EditBox в котором хотим вводить дабл
C++
1
2
3
4
5
6
7
8
if(!sscanf(m_edit.GetBuffer(m_edit.GetLength()),"%lf",&value))
{
    //тут парсим ошибочный ввод
}
else
{
    //тут парсим корректный ввод
}
А от себя добавлю - зачем использовать "тупое" АПИ и получать инфу с контролов посредством GetDlgItemText если есть MFC в котором сразу можно ставить контролу соотвествующий тип переменной?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 12:13     Узнать тип переменной #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(sizeof(val) == sizeof(char)) {} else if(sizeof(val) == sizeof(double)) {}
Т.е. тебя не смущает, что С++ (почти) строго типизированный язык и val Имеет именно тот тип, который указан программистом при создании?


Цитата Сообщение от Flaker Посмотреть сообщение
Как узнать тип переменной?
Зачем?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
09.07.2012, 12:38     Узнать тип переменной #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот парни сами посудите число 2 - это может быть и int и short и long (конечно же + signed unsigned). Ну вот кто из вас отгадает какой тип я загадал?Ну вот тоже самое просите компилятор сделать - можно лишь получить ориентировочный тип.
Ага, только язык у нас строго типизированный. И тип переменной мы узнаем, глядя на код.
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 12:52     Узнать тип переменной #11
Deviaphan,
fasked, Вот вам пример берём АПИ приложение - в EdiBox-е юзер ввёл 25. Итак скажите мне что это int short long или м.б double???Жду ответов
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
09.07.2012, 13:02     Узнать тип переменной #12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот вам пример берём АПИ приложение - в EdiBox-е юзер ввёл 25. Итак скажите мне что это int short long или м.б double???Жду ответов
Это char*

Добавлено через 1 минуту
Deviaphan, fasked, строго типизированный, да. Но как-минимум одно место есть — шаблоны. Впрочем, определять тип в них надёжнее всего с помощью тех же шаблонов или перегрузок.
-=ЮрА=-
Заблокирован
Автор FAQ
09.07.2012, 13:30     Узнать тип переменной #13
grizlik78, чар чаром(верней строка чаров),но тотже sscanf может сделать из нее и инт и дабл. Как я понял у тс стоит задача защищенного ввода и решать ее надо не сравнением типов.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:37     Узнать тип переменной #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
юзер ввёл 25. Итак скажите мне что это int short long или м.б double?
А на этот вопрос никто не ответит.) Тип данных однозначен, это char* (или wchar_t*), а уж как их интерпретировать, это совсем другой вопрос. Я могу написать код, где числом 25 будет обозначен какой-то мега-супер-большой класс. BCD число, например.

Добавлено через 59 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но как-минимум одно место есть — шаблоны.
За переключение типов в шаблонах нужно пожизненно лишать программистской лицензии.)
enk
 Аватар для enk
45 / 44 / 7
Регистрация: 16.06.2012
Сообщений: 177
09.07.2012, 18:15     Узнать тип переменной #15
C++
1
typeid( int ).name();
Вернёт тип в строковом представлении, например:
C++
1
2
3
typeid( int ).name(); // "int"
typeid( int* ).name(); // "int *"
typeid( char ).name(); // "char"
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.07.2012, 18:20     Узнать тип переменной #16
enk, а у меня всего лишь в таком виде возвращает:

i
Pi
c
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 18:21     Узнать тип переменной #17
Schizorb, потому, что
Returns an implementation defined null-terminated character string containing the name of the type
Aleksej59
Сообщений: n/a
22.07.2012, 13:51     Узнать тип переменной #18
Цитата Сообщение от Deviaphan Посмотреть сообщение
Зачем?
допустим, я не хочу передавать в шаблон количество элементов массива. Как я его определю, не зная тип?

C
1
2
3
4
template <typename T> int iGetIndexOfMinElement (T arr[])
{
....
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.07.2012, 13:56     Узнать тип переменной #19
Цитата Сообщение от Aleksej59 Посмотреть сообщение
допустим, я не хочу передавать в шаблон количество элементов массива. Как я его определю, не зная тип?
А в чём сложность? Как ты его определишь, если тип известен? Вот так же определяй и для типа T.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2012, 14:02     Узнать тип переменной
Еще ссылки по теме:

Узнать тип значения, зная тип указателя C++
Тип переменной C++
C++ Тип переменной WIN32_FIND_DATA

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.07.2012, 14:02     Узнать тип переменной #20
Цитата Сообщение от Aleksej59 Посмотреть сообщение
Как я его определю, не зная тип?
А как ты узнаешь количество элементов массива, зная тип одного элемента?
И ты не с той стороны к решению проблемы подходишь. Если массив статический, то количество элементов можно выводить автоматически через параметр шаблона, если массив динамический, то тебе всё равно количество элементов (или размер в байтах) передавать нужно.
Лучше озвучь изначальную проблему, потому что сейчас мы явно ищем правильное решение для не правильной проблемы. Т.е. дурью маемся.
Yandex
Объявления
22.07.2012, 14:02     Узнать тип переменной
Ответ Создать тему
Опции темы

Текущее время: 19:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru