Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/140: Рейтинг темы: голосов - 140, средняя оценка - 4.55
 Аватар для xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129

Как вывести тип переменной?

14.01.2016, 19:35. Показов 26458. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо, чтобы функция возвращала тип переменной.

т.е.

C++
1
2
3
4
typename function(type)
{
   return type;
}
в результате применения
function(int) должно вернуть int, function(char) должно вернуть char;
char a; function(a) должно вернуть char;

Использование структур и прочих дополнительных костылей не желательно... думаю, что должна быть встроенная функция (одна или несколько) в самом c++, которая позволяет реализовать подобную задачу.

Итак, кто знает как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2016, 19:35
Ответы с готовыми решениями:

Как по имени переменной вывести значение этой переменной?
К примеру: У нас есть заранее установленный переменные. Мы просим пользователя ввести имя переменной и выводим значение этой...

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

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

16
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.01.2016, 19:38
Лучший ответ Сообщение было отмечено xlxndr как решение

Решение

C++
1
2
3
4
#include <typeinfo>
 
template<class T>
void f(T t) { cout << typeid(t).name() << endl; }
Могу такой вариант предложить.
1
59 / 59 / 24
Регистрация: 17.11.2012
Сообщений: 1,602
14.01.2016, 19:39
xlxndr,
C++
1
typeid(var).name()
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
14.01.2016, 19:40
Цитата Сообщение от xlxndr Посмотреть сообщение
чтобы функция возвращала тип переменной.
бред. Не находите?
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2016, 19:41

Не по теме:

Croessmah, согласен


xlxndr, а зачем тебе это если не секрет, ты по мойму не в ту область смотришь
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.01.2016, 19:42
Цитата Сообщение от Croessmah Посмотреть сообщение
бред. Не находите?
почему бы и нет, если рассматривать это все в контексте функций над типами.

Скажем:
C++
1
2
template <typename T>
using id = T;
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
14.01.2016, 19:47
Voivoid, причем здесь шаблон псевдонима?
0
 Аватар для xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 19:54  [ТС]
И что, тогда sizeof(typeid(int).name()) вернет значение 4 ?
мда... действительно возвращает... всем спасибо, похоже дальше разберусь...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 19:59
Цитата Сообщение от xlxndr Посмотреть сообщение
Необходимо, чтобы функция возвращала тип переменной.
http://rextester.com/AQUW16860

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
    
    
    int first = 10;
    
        
    // decltype вернет тип переменной указанной в скобочках
    // таким образом слева от переменной second 
    // будет стоять такой же тип,
    // как и у переменной first
        
    decltype(first) second = 20;
    
    std::cout << "типом переменной second является '"
        << typeid(second).name()<< "'\n";
    
}
Добавлено через 1 минуту
Цитата Сообщение от xlxndr Посмотреть сообщение
И что, тогда sizeof(typeid(int).name()) вернет значение 4 ?
мда... действительно возвращает... всем спасибо, похоже дальше разберусь...
боюсь, что оно возвращает совсем не то, о чем вы подумали.
в этой ситуации sizeof возвращает размер указателя, а не инта.
1
 Аватар для xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 20:02  [ТС]
decltype - это что за функция такая? (у меня не работает)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
14.01.2016, 20:05
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
Вывод типа.
Цитата Сообщение от xlxndr Посмотреть сообщение
(у меня не работает)
компилятор обновите, оно из C++11.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2016, 20:19
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
http://g.zeos.in/?q=decltype
1
 Аватар для xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 20:25  [ТС]
ок, с decltype попробую потом... у меня обычный MinGW, и вряд ли это возможно устанавливать новый компилятор...

Пока меня устравиал бы вариант не с возвращением непосредственно типа в исходном виде (int,char и т.д.), а хотя бы его размера. Но не знаю, как бы запихнуть в функцию переменную без явного указания типа, который должна принимать функция... Вот здесь память явно выделяется в функции, а мне нужно... видимо чтобы как-то "динамически" выделялась в зависимости от типа переменной:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int ReturnSize(long double var)   // ВОТ ЗДЕСЬ НУЖНО НЕ УКАЗЫВАТЬ КОНКРЕТНЫЙ ТИП
{
    return sizeof(var);    
}
 
int main()
{
  int a;
  double b;
  long double c;
  
  cout << ReturnSize(a) << endl;
  
 system("pause");
 return 0;   
}
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
14.01.2016, 20:28
Цитата Сообщение от xlxndr Посмотреть сообщение
ВОТ ЗДЕСЬ НУЖНО НЕ УКАЗЫВАТЬ КОНКРЕТНЫЙ ТИП
путь в шаблоны
2
 Аватар для xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 21:18  [ТС]
В принципе, да, такой вариант работает... мне изначально его Makfak предлагал... к сожалению только сейчас разобрался что такое шаблон...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
template <typename T>
void ReturnInfo(T var)
{
    cout << "Variable " << typeid(var).name() << " have size " << sizeof(var) << "B\n";     
}
 
int main()
{
  int a;
  double b;
  long double c;
  
  ReturnInfo(c);
  
  system("pause");
  return 0;   
}
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.01.2016, 21:44
Цитата Сообщение от Croessmah Посмотреть сообщение
Voivoid, причем здесь шаблон псевдонима?
Смотри на это как на функцию оперирующую типами. В данном случае функция ( тут я под понятием функции подразумеваю её математический смысл ) id принимает некоторый тип и возвращает его же.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,033
Записей в блоге: 1
14.01.2016, 21:48
Voivoid, функция возвращает объект, а не тип.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2016, 21:48
Помогаю со студенческими работами здесь

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

Как вернуть тип переменной и любого другого элемента программы?
Есть такой примитивный код. #include &quot;stdafx.h&quot;//должна быть в начале #include &lt;conio.h&gt; #include &lt;iostream&gt; using...

Как в консоли вывести строковый тип?
Стандартный поток вывода (cout) не может вывести переменную строкового типа (string). Вот примерный код: #include...

как переобразовать тип переменной char в
#include &lt;iostream&gt; #include &quot;main.h&quot; #include &lt;conio.h&gt; int main(){ using namespace std; setlocale(LC_ALL , &quot;RUSSIAn&quot;);//язик...

как определить тип переменной в функции f(void x)
Добрый день, есть функция которая принимает значение типа void, а уже в зависимости от типа делает операции int f(void x) { ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru