Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/89: Рейтинг темы: голосов - 89, средняя оценка - 4.71
3 / 3 / 1
Регистрация: 07.07.2012
Сообщений: 90
1

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

09.07.2012, 00:47. Показов 15978. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1) Как узнать тип переменной?

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

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

3) Как сделать проверку: если в textbox введена цифра, то делать что то...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2012, 00:47
Ответы с готовыми решениями:

template, узнать тип переменной
template <class RCIN> RCIN cinn(void) { RCIN enter; if(RCIN == std::string) // Как узнать тип...

Как узнать тип переменной?
Здравствуйте! Не давно начал заниматься изучением языка С++, и возник вопрос. Как узнать узнать...

Восьмибитный тип переменной (что за тип, но не BYTE и не CHAR?
Вроде давно занимаюсь программированием на С++, но встала проблема... Есть некий массив переменных...

Узнать тип значения, зная тип указателя
Здравствуйте! Есть такой код: template<class Iter> void func(Iter first, Iter last) { ...

20
47 / 46 / 26
Регистрация: 16.06.2012
Сообщений: 177
09.07.2012, 01:22 2
1. https://www.cyberforum.ru/post614069.html
2. itoa
3. sorry, dunno
0
Заблокирован
Автор FAQ
09.07.2012, 02:31 3
Flaker, да легко сделай свич на размер переменной
sizeof(val) - на скрине размер в байтах каждой переменной
В принципе всё что по 1-му байту - это целые
(int и char взаимопереходящи)
2-м байтам - это целые
4 - ри надо разбирать
8 - дабл
10 - длинный дабл
Миниатюры
Узнать тип переменной  
0
3 / 3 / 1
Регистрация: 07.07.2012
Сообщений: 90
09.07.2012, 02:51  [ТС] 4
Да нее... Это же ужасно! Свитч, что бы определить тип переменной... там вон 5 типов на 2 байта, как тут определишь? Нормальной функции, которая вернеет строку с названием типа переменной нету чтоль? :|
enk скинул ссылку на тему, в которой говорится, что определяют тип переменной обычно с помощью typeid, но я не понял, что и как typeid возвращает, и как его вобще использовать.
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
09.07.2012, 06:30 5
1) Наверное, можно как-то так:

C++
1
if (typeid(var) == typeid(int))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
09.07.2012, 07:04 6
А я не понял, для чего это нужно... Ладно бы еще - тип объекта. Но для чего может понадобиться определение типа переменной в рантайме - не представляю. Если бы в С++ был бы тип variant (как в VB/VBA), который мог хранить переменную любого типа - тогда, конечно. В общем автор темы лично меня заинтриговал.
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
09.07.2012, 09:29 7
-=ЮрА=-, конкретный размер переменных стандартом не определен, все зависит от используемого компилятора и архитектуры.
0
Заблокирован
Автор 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 данный контрол имеет защиту от некорректного ввода см сюда https://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 в котором сразу можно ставить контролу соотвествующий тип переменной?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 12:13 9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(sizeof(val) == sizeof(char)) {} else if(sizeof(val) == sizeof(double)) {}
Т.е. тебя не смущает, что С++ (почти) строго типизированный язык и val Имеет именно тот тип, который указан программистом при создании?


Цитата Сообщение от Flaker Посмотреть сообщение
Как узнать тип переменной?
Зачем?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
09.07.2012, 12:38 10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот парни сами посудите число 2 - это может быть и int и short и long (конечно же + signed unsigned). Ну вот кто из вас отгадает какой тип я загадал?Ну вот тоже самое просите компилятор сделать - можно лишь получить ориентировочный тип.
Ага, только язык у нас строго типизированный. И тип переменной мы узнаем, глядя на код.
0
Заблокирован
Автор FAQ
09.07.2012, 12:52 11
Deviaphan,
fasked, Вот вам пример берём АПИ приложение - в EdiBox-е юзер ввёл 25. Итак скажите мне что это int short long или м.б double???Жду ответов
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
09.07.2012, 13:02 12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот вам пример берём АПИ приложение - в EdiBox-е юзер ввёл 25. Итак скажите мне что это int short long или м.б double???Жду ответов
Это char*

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

Добавлено через 59 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но как-минимум одно место есть — шаблоны.
За переключение типов в шаблонах нужно пожизненно лишать программистской лицензии.)
0
47 / 46 / 26
Регистрация: 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"
1
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
09.07.2012, 18:20 16
enk, а у меня всего лишь в таком виде возвращает:

i
Pi
c
0
2554 / 1319 / 178
Регистрация: 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
1
Aleksej59
22.07.2012, 13:51 18
Цитата Сообщение от Deviaphan Посмотреть сообщение
Зачем?
допустим, я не хочу передавать в шаблон количество элементов массива. Как я его определю, не зная тип?

C
1
2
3
4
template <typename T> int iGetIndexOfMinElement (T arr[])
{
....
}
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
22.07.2012, 13:56 19
Цитата Сообщение от Aleksej59 Посмотреть сообщение
допустим, я не хочу передавать в шаблон количество элементов массива. Как я его определю, не зная тип?
А в чём сложность? Как ты его определишь, если тип известен? Вот так же определяй и для типа T.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
22.07.2012, 14:02 20
Цитата Сообщение от Aleksej59 Посмотреть сообщение
Как я его определю, не зная тип?
А как ты узнаешь количество элементов массива, зная тип одного элемента?
И ты не с той стороны к решению проблемы подходишь. Если массив статический, то количество элементов можно выводить автоматически через параметр шаблона, если массив динамический, то тебе всё равно количество элементов (или размер в байтах) передавать нужно.
Лучше озвучь изначальную проблему, потому что сейчас мы явно ищем правильное решение для не правильной проблемы. Т.е. дурью маемся.
0
22.07.2012, 14:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 14:02
Помогаю со студенческими работами здесь

Тип переменной
Hello В общем, дана задача: Даны два натуральных числа A и B. Требуется определить большее из...

тип переменной
Подскажите пожалуйста, можно ли в С++ задать тип переменной, ограничивающий значение дробного...

Тип переменной WIN32_FIND_DATA
вот пишу матрицу доступов. пытаюсь считать из папки количество файлов, хранящейся в ней, но когда...

Тип переменной WIN32_FIND_DATA
Не получается сохранить имена файлов в массив . Не могу разобраться с типами . Вот код: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru