Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
1

Узнать тип значения, зная тип указателя

23.09.2013, 12:46. Просмотров 537. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<class Iter> 
void func(Iter first, Iter last) 
{
   //...
   Iter_value_type = *first; // создаем локальную переменную char со значением *first
   //...
}
int main() {
    char ach[] = "Hello";
    func(&ach[0], &ach[3]);
 
};
Скажите пожалуйста можно ли как-то узнать тип значения, зная тип указателя, не прибегая к использованию дополнительного шаблонного аргумента?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2013, 12:46
Ответы с готовыми решениями:

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt;...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс)...

Что определяет тип указателя
Наткнулся на ответ: Что определяет тип указателя? Размер смещения при инкременте указателя ...

Как поменять тип данных у указателя?
Здравствуйте, уже часа 3 маюсь, все никак не могу поменять тип данных... это надо для отправки по...

2
248 / 218 / 63
Регистрация: 30.07.2013
Сообщений: 465
23.09.2013, 13:36 2
Во-первых, если функция вызывается только для указателей, то можно сделать так:
C++
1
2
3
4
5
6
7
template< class Iter > 
void func( Iter* first, Iter* last )
{
   ...
   Iter value = *first;
   ...
}
Во-вторых, при наличии C++11 можно сделать так:
C++
1
2
3
4
5
6
7
8
template< class Iter > 
void func( Iter first, Iter last )
{
    ...
    auto value1 = *first;
    decltype(*first) value2 = *first;
    ...
}
Ну и в-третьих, на всякий случай, просто узнать тип можно с помощью
C++
1
typeid(*first).name();
1
35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
23.09.2013, 13:38  [ТС] 3
Цитата Сообщение от Fyret Посмотреть сообщение
Во-первых, если функция вызывается только для указателей, то можно сделать так:
C++
1
2
3
4
5
6
7
template< class Iter > 
void func( Iter* first, Iter* last )
{
   ...
   Iter value = *first;
   ...
}
Во-вторых, при наличии C++11 можно сделать так:
C++
1
2
3
4
5
6
7
8
template< class Iter > 
void func( Iter first, Iter last )
{
    ...
    auto value1 = *first;
    decltype(*first) value2 = *first;
    ...
}
Ну и в-третьих, на всякий случай, просто узнать тип можно с помощью
C++
1
typeid(*first).name();
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2013, 13:38

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

Выражение должно иметь тип указателя
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct laiks...

Выражение должно иметь тип указателя
if (Settings::Misc::misc_Bhop) { if (pCmd-&gt;buttons &amp; IN_JUMP &amp;&amp; !(!flag-&gt;GetMoveType &amp;...

Выражение должно иметь тип указателя
что тут не так IClientEntity *player=...

Где в памяти хранится тип указателя?
Привет! Вы не подскажите, где в памяти храниться тип указателя? Ну допустим, у нас x86 и...

Как изменить тип указателя массива ?
Например создаю массив: void * mass; if(1 == 1) mass = wchar_t; else mass = char; Пример...

Передача указателя на массив тип complex в функцию
Всем дорого времени суток! Возникла проблема. Подскажите, пожалуйста. Как &quot;правильно&quot; сделать:...


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

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

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