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

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

14.01.2016, 19:35. Просмотров 1447. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2016, 19:35
Ответы с готовыми решениями:

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

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

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

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

Тип int. Как вывести следующее 050?
Вопрос следующего характера, имея переменную типа int, как вывести к примеру...

16
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,207
Записей в блоге: 1
Завершенные тесты: 2
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
HidForce
57 / 57 / 24
Регистрация: 17.11.2012
Сообщений: 1,602
14.01.2016, 19:39 3
xlxndr,
C++
1
typeid(var).name()
1
Croessmah
++Ͻ
14755 / 8433 / 1601
Регистрация: 27.09.2012
Сообщений: 20,735
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 19:40 4
Цитата Сообщение от xlxndr Посмотреть сообщение
чтобы функция возвращала тип переменной.
бред. Не находите?
0
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,149
Завершенные тесты: 1
14.01.2016, 19:41 5

Не по теме:

Croessmah, согласен


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

Скажем:
C++
1
2
template <typename T>
using id = T;
1
Croessmah
++Ͻ
14755 / 8433 / 1601
Регистрация: 27.09.2012
Сообщений: 20,735
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 19:47 7
Voivoid, причем здесь шаблон псевдонима?
0
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
14.01.2016, 19:54  [ТС] 8
И что, тогда sizeof(typeid(int).name()) вернет значение 4 ?
мда... действительно возвращает... всем спасибо, похоже дальше разберусь...
0
hoggy
Заблокирован
Эксперт С++
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
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
14.01.2016, 20:02  [ТС] 10
decltype - это что за функция такая? (у меня не работает)
0
Croessmah
++Ͻ
14755 / 8433 / 1601
Регистрация: 27.09.2012
Сообщений: 20,735
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 20:05 11
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
Вывод типа.
Цитата Сообщение от xlxndr Посмотреть сообщение
(у меня не работает)
компилятор обновите, оно из C++11.
1
hoggy
Заблокирован
Эксперт С++
14.01.2016, 20:19 12
Цитата Сообщение от xlxndr Посмотреть сообщение
decltype - это что за функция такая?
http://g.zeos.in/?q=decltype
1
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
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
Croessmah
++Ͻ
14755 / 8433 / 1601
Регистрация: 27.09.2012
Сообщений: 20,735
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 20:28 14
Цитата Сообщение от xlxndr Посмотреть сообщение
ВОТ ЗДЕСЬ НУЖНО НЕ УКАЗЫВАТЬ КОНКРЕТНЫЙ ТИП
путь в шаблоны
2
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
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
Voivoid
709 / 281 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
14.01.2016, 21:44 16
Цитата Сообщение от Croessmah Посмотреть сообщение
Voivoid, причем здесь шаблон псевдонима?
Смотри на это как на функцию оперирующую типами. В данном случае функция ( тут я под понятием функции подразумеваю её математический смысл ) id принимает некоторый тип и возвращает его же.
0
Croessmah
++Ͻ
14755 / 8433 / 1601
Регистрация: 27.09.2012
Сообщений: 20,735
Записей в блоге: 3
Завершенные тесты: 1
14.01.2016, 21:48 17
Voivoid, функция возвращает объект, а не тип.
0
14.01.2016, 21:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 21:48

Как вывести имя переменной?
#define PRINT(var_) std::cout &lt;&lt; #var_ &lt;&lt; &quot;: &quot; &lt;&lt; var_ &lt;&lt; std::endl; ...

Как вывести элементы вектора, тип которых pair<string>?
#include &lt;iostream&gt; #include &lt;utility&gt; #include &lt;vector&gt; #include &lt;iterator&gt;...

Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной - значение п
Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной...


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

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

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