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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Flaker
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
#1

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

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

1) Как узнать тип переменной?

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

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

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

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

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

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

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

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

Тип переменной WIN32_FIND_DATA - C++
Не получается сохранить имена файлов в массив . Не могу разобраться с типами . Вот код: #include "stdafx.h" #include <tchar.h> ...

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

C++
1
if (typeid(var) == typeid(int))
0
Catstail
Модератор
22616 / 10977 / 1779
Регистрация: 12.02.2012
Сообщений: 18,121
09.07.2012, 07:04 #6
А я не понял, для чего это нужно... Ладно бы еще - тип объекта. Но для чего может понадобиться определение типа переменной в рантайме - не представляю. Если бы в С++ был бы тип variant (как в VB/VBA), который мог хранить переменную любого типа - тогда, конечно. В общем автор темы лично меня заинтриговал.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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 данный контрол имеет защиту от некорректного ввода см сюда 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 в котором сразу можно ставить контролу соотвествующий тип переменной?
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 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 Посмотреть сообщение
Как узнать тип переменной?
Зачем?
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
grizlik78
Эксперт С++
1913 / 1445 / 113
Регистрация: 29.05.2011
Сообщений: 3,001
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
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:37 #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
юзер ввёл 25. Итак скажите мне что это int short long или м.б double?
А на этот вопрос никто не ответит.) Тип данных однозначен, это char* (или wchar_t*), а уж как их интерпретировать, это совсем другой вопрос. Я могу написать код, где числом 25 будет обозначен какой-то мега-супер-большой класс. BCD число, например.

Добавлено через 59 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но как-минимум одно место есть — шаблоны.
За переключение типов в шаблонах нужно пожизненно лишать программистской лицензии.)
0
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"
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 18:15
Привет! Вот еще темы с ответами:

Любой тип переменной - C++
Как указать переменной что тип неопределён? Допустим: struct STRUCTa{ short v1,v2; } struct STRUCTb{ float v1,v2; } ...

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

Узнать тип для new в runtim'e - C++
можно ли создать динамически с помощью new(или как-то иначе) объект типа, такого же, как тип другого объекта(указателя)? причем тип этого...

Неопределенный тип переменной в структуре - C++
Есть некоторая структура в одной переменной которой необходимо хранить переменные разных типов (т.е. там может лежать "строка" или число...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.07.2012, 18:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru