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

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

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

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

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

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

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

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

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

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

Узнать тип значения, зная тип указателя - 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++
вот пишу матрицу доступов. пытаюсь считать из папки количество файлов, хранящейся в ней, но когда начинаю массиву типа string присваивать...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
09.07.2012, 02:51  [ТС]     Узнать тип переменной #4
Да нее... Это же ужасно! Свитч, что бы определить тип переменной... там вон 5 типов на 2 байта, как тут определишь? Нормальной функции, которая вернеет строку с названием типа переменной нету чтоль? :|
enk скинул ссылку на тему, в которой говорится, что определяют тип переменной обычно с помощью typeid, но я не понял, что и как typeid возвращает, и как его вобще использовать.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.07.2012, 06:30     Узнать тип переменной #5
1) Наверное, можно как-то так:

C++
1
if (typeid(var) == typeid(int))
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
09.07.2012, 07:04     Узнать тип переменной #6
А я не понял, для чего это нужно... Ладно бы еще - тип объекта. Но для чего может понадобиться определение типа переменной в рантайме - не представляю. Если бы в С++ был бы тип variant (как в VB/VBA), который мог хранить переменную любого типа - тогда, конечно. В общем автор темы лично меня заинтриговал.
kazak
3034 / 2355 / 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++
1286 / 1220 / 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:37     Узнать тип переменной #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
юзер ввёл 25. Итак скажите мне что это int short long или м.б double?
А на этот вопрос никто не ответит.) Тип данных однозначен, это char* (или wchar_t*), а уж как их интерпретировать, это совсем другой вопрос. Я могу написать код, где числом 25 будет обозначен какой-то мега-супер-большой класс. BCD число, например.

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

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

Как вывести тип переменной? - C++
Необходимо, чтобы функция возвращала тип переменной. т.е. typename function(type) { return type; }

Как определить тип переменной? - C++
isdigit тока нашел. а как узнать char или int или есть типа is_array? конечно можно все реализовать на перегрузке функции но лучшеб...

Проверка переменной на целый тип - C++
Есть массив; нужно ввести элементы; элементы должны быть целыми; Как это проверить, что если это символ или числа+символы, или...

Тип памяти переменной float - C++
Доброго время суток всем! помоги найти ответ на вопрос, что за тип памяти переменной и вообще какие они бывают в С++.За ранее спасибо!


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

Или воспользуйтесь поиском по форуму:
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"
Yandex
Объявления
09.07.2012, 18:15     Узнать тип переменной
Ответ Создать тему
Опции темы

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