Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
1

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

14.01.2016, 19:35. Просмотров 6996. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2016, 19:35
Ответы с готовыми решениями:

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

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

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

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

16
Любитель чаепитий
3499 / 1612 / 501
Регистрация: 24.08.2014
Сообщений: 5,529
Записей в блоге: 1
14.01.2016, 19:38 2
Лучший ответ Сообщение было отмечено 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 3
xlxndr,
C++
1
typeid(var).name()
1
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,168
Записей в блоге: 2
14.01.2016, 19:40 4
Цитата Сообщение от xlxndr Посмотреть сообщение
чтобы функция возвращала тип переменной.
бред. Не находите?
0
598 / 237 / 68
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2016, 19:41 5

Не по теме:

Croessmah, согласен


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

Скажем:
C++
1
2
template <typename T>
using id = T;
1
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,168
Записей в блоге: 2
14.01.2016, 19:47 7
Voivoid, причем здесь шаблон псевдонима?
0
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 19:54  [ТС] 8
И что, тогда sizeof(typeid(int).name()) вернет значение 4 ?
мда... действительно возвращает... всем спасибо, похоже дальше разберусь...
0
Эксперт С++
8225 / 3813 / 826
Регистрация: 15.11.2014
Сообщений: 8,661
14.01.2016, 19:59 9
Цитата Сообщение от 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
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 20:02  [ТС] 10
decltype - это что за функция такая? (у меня не работает)
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,168
Записей в блоге: 2
14.01.2016, 20:05 11
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
Вывод типа.
Цитата Сообщение от xlxndr Посмотреть сообщение
(у меня не работает)
компилятор обновите, оно из C++11.
1
Эксперт С++
8225 / 3813 / 826
Регистрация: 15.11.2014
Сообщений: 8,661
14.01.2016, 20:19 12
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
http://g.zeos.in/?q=decltype
1
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 20:25  [ТС] 13
ок, с 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
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,168
Записей в блоге: 2
14.01.2016, 20:28 14
Цитата Сообщение от xlxndr Посмотреть сообщение
ВОТ ЗДЕСЬ НУЖНО НЕ УКАЗЫВАТЬ КОНКРЕТНЫЙ ТИП
путь в шаблоны
2
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
14.01.2016, 21:18  [ТС] 15
В принципе, да, такой вариант работает... мне изначально его 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
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.01.2016, 21:44 16
Цитата Сообщение от Croessmah Посмотреть сообщение
Voivoid, причем здесь шаблон псевдонима?
Смотри на это как на функцию оперирующую типами. В данном случае функция ( тут я под понятием функции подразумеваю её математический смысл ) id принимает некоторый тип и возвращает его же.
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,168
Записей в блоге: 2
14.01.2016, 21:48 17
Voivoid, функция возвращает объект, а не тип.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2016, 21:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

Надо вывести название переменной, тип данных переменной, значение переменной
у нас есть переменная int variable = 0; Надо вывести название переменной, тип данных переменной,...

Надо вывести название переменной, тип данных переменной, значение переменной
у нас есть переменная int variable = 0; Надо вывести название переменной, тип данных переменной,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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