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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Mirmik
144 / 116 / 30
Регистрация: 27.02.2014
Сообщений: 679
#1

Decltype и typeof - C++

18.05.2014, 13:20. Просмотров 1734. Ответов 8
Метки нет (Все метки)

Товарищи.

Возникла проблема с пониманием std++11.
Насколько я понимаю typeof более не поддерживается.

Сегодня познакомился с std++11.
И возникла необходимость перейти с typeof на decltype.
Попытался тупо поменять.

Ранее было что-то вроде:
C++
1
2
3
4
5
6
class A{int x;};
A* a;
int main()
{
(typeof(*a)*)0;
}
и оно компилировалось.

Теперь по идее должно быть что-то вроде
C++
1
2
3
4
5
6
class A{int x;};
A* a;
int main()
{
(decltype(*a)*)0;
}
И оно не компилируется, выдавая cannot declare pointer to 'class A&'

Тоесть возвращается не 'A', который я ожидаю, а некое непонятное мне 'class A&', смысл которого мне неочевиден и...

В общем, спасайте...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 13:20     Decltype и typeof
Посмотрите здесь:

Константы, decltype - C++
Суть в том, что, если тип не есть класс, то при определении типа cv-квалификаторы отбрасываются. А сам объект остаётся...

Typeof - C++
В вижуал не определяется идентификатор typeof. Срочно нужно решить проблему с исправлением этой строчки: struct Consume *ap =...

decltype с тернарным оператором - C++
Почему в данном коде функция foo всегда работает нормально, а max работает только с int-ами?#include <iostream> template<typename T> ...

Определения типа через decltype - C++
Добрый день, int main() { int a = {1, 2, 3}; decltype(auto) c = (a); } Объясните:

Отличия спецификаторов decltype и auto - C++
Спецификатор auto : - выводит тип переменной из инициализатора; - может задействовать только один тип или чтобы они были совместимыми;...

В чем отличие decltype и auto - C++
в чем отличие типа decltype и типа auto?

Странная ошибка с decltype [GCC 4.9.2] - C++
Всем привет, есть следующий метод : class AddressV4 { public: static std::set<AddressV4> getByName(const std::string...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.05.2014, 13:25     Decltype и typeof #2
тип выражения "разыменовывание указателя типа A" - ссылка на A.
зачем вы это в decltype делаете? может просто: decltype(a) 0; ?
Mirmik
144 / 116 / 30
Регистрация: 27.02.2014
Сообщений: 679
18.05.2014, 13:35  [ТС]     Decltype и typeof #3
Мой код использует линуксовые связные списки.

Вот цепочка, на которой засыпался код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void command_print()
{command_t* p;
list_for_each_entry(p,&command_head,list)
{};
 
#define list_for_each_entry(pos, head, member)              \
    for (pos = list_entry((head)->next, decltype(*pos), member);    \
         &pos->member != (head);    \
         pos = list_entry(pos->member.next, decltype(*pos), member))
 
#define list_entry(ptr, type, member) \
    container_of(ptr, type, member)
 
#define container_of(ptr, type, member) ({          \
    const decltype( ((type *)0)->member ) *__mptr = (ptr);  \
    (type *)( (char *)__mptr - offsetof(type,member) );})
А сильно переписывать реализацию списков бы не хотелось...
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.05.2014, 13:41     Decltype и typeof #4
ну и что следует из того, что он их использует? для этого в деклтайпе нужно что-то разыменовывать? я не понял.
можете еще попробовать с auto поиграться там, где вы переменные объявляете.
да и вообще на макросах так делать - хрень какая-то. на шаблонах код будет понятнее.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
18.05.2014, 13:45     Decltype и typeof #5
Вопрос отдает "хочу то, не знаю что". И не ясно зачем.
Посему:
1. Покажите минимальный компилируемый рабочий пример.
2. Скажите что конкретно не устраивает и чего хотите добиться.
3. Не забывайте о тегах для кода.
Mirmik
144 / 116 / 30
Регистрация: 27.02.2014
Сообщений: 679
18.05.2014, 13:45  [ТС]     Decltype и typeof #6
Я хочу решить с помощью decltype задачу, которая решалась typeof.

Если выкинуть все лишнее, проблема упирается в то, что

(decltype(*a)*)0;
и
(typeof(*a)*)0;

не одно и тоже.

Вопрос: Способен ли decltype решать туже задачу, что и typeof? Если да, то как, а если нет, то как из этого вывернуться?

Короче, нужен функциональный аналог typeof в стандарте std++11.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.05.2014, 14:00     Decltype и typeof #7
на вопрос из первого поста я вроде бы ответил. не работает чтоли вариант decltype(a) O;
в макросах же ситуация усугубляется тем, что там не контролируется то, что может подставится вместо
а. там могут присутствовать звездочки, амперсенды и т.п. там наверно нужна комбинация каких-нибудь
std::remove_reference<T>, std::remove_pointer<T> и прочая муть. и еще раз: возможно у вас все упростится
с использованием простого auto.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.05.2014, 14:24     Decltype и typeof #8
Цитата Сообщение от Mirmik Посмотреть сообщение
Вопрос: Способен ли decltype решать туже задачу, что и typeof?
а что такое typeof в С++ ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 14:25     Decltype и typeof
Еще ссылки по теме:

Имитация typeof в C/C++ коде - C++
Можно ли считать, что следующие макросы полностью имитируют typeof через decltypeof и в случае подключения хеадера компилятором С и в...

Code::Blocks ругается на auto и decltype - C++
Написал небольшую программку, на среде Eclipse Mars все работает очень даже отлично, а вот на Code::Blocks выдает следующее : &quot;error:...

Стивен Прата - про decltype (гл. 8, стр. 422) - C++
Прочитал раз десять. Сверился с оригиналом: Я что-то упустил или тип функции long? Соответственно, и m должна быть long? С какого...

Объясните пример с decltype, инициализацией контейнера map, по работе for_each и copy - C++
template&lt;class T, class U&gt; auto hellSum(const T&amp; x, const U&amp; y) -&gt; decltype(x + y) { return x + y; } Вот...

Typeof: string parameter - C#
Всё очень просто. Каким образом корректно вызвать такой код: string className = &quot;myClass&quot;; Type type = typeof(className ); //...


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

Или воспользуйтесь поиском по форуму:
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
18.05.2014, 14:25     Decltype и typeof #9
Цитата Сообщение от Jupiter Посмотреть сообщение
а что такое typeof в С++ ?
Гнутое расширение, еще до стандартизации decltype.
http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
Yandex
Объявления
18.05.2014, 14:25     Decltype и typeof
Ответ Создать тему
Опции темы

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