Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / получить возращаемый тип функции класса / 9 сообщений из 9, страница 1 из 1
16.05.2016, 22:10
    #39236934
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
я тут написал такой код
Код: plaintext
1.
2.
3.
4.
5.
template<typename M, typename O>class manager {
public:
  using obj_id_type = std::result_of_t<decltype(&O::id)>;
  // ... other code
};

компилятор мне гооворит, что invalid use of incomplete type 'class std::result_of<unsigned int (auth::user::*)()const>'

как же мне получить тип возращаемого методом значения?
...
Рейтинг: 0 / 0
17.05.2016, 06:18
    #39237037
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
alexy_black, предположил бы auto использовать, но, подозреваю, это не подойдёт
...
Рейтинг: 0 / 0
17.05.2016, 09:39
    #39237092
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
да, у меня там приватный член данных - std::map<obj_id_type,std::vector<field_ptr>> meta_store_;

пока я только думаю что от него можно избавиться.. но вот код вроде логичный, а не компилится.
...
Рейтинг: 0 / 0
18.05.2016, 06:37
    #39237838
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
alexy_black, я слап в этом, практики почти ноль, но читал Майерса, как раз где-то в этих местах, связанных с шаблонами и привидением типов, есть отличия в C11 и C14, какие-то случаи не компилятся в 11-м
...
Рейтинг: 0 / 0
19.05.2016, 11:12
    #39238888
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
alexy_blackя тут написал такой код
Код: plaintext
1.
2.
3.
4.
5.
template<typename M, typename O>class manager {
public:
  using obj_id_type = std::result_of_t<decltype(&O::id)>;
  // ... other code
};

компилятор мне гооворит, что invalid use of incomplete type 'class std::result_of<unsigned int (auth::user::*)()const>'

как же мне получить тип возращаемого методом значения?

auto -лучший способ.
...
Рейтинг: 0 / 0
19.05.2016, 13:32
    #39239072
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
alexy_black,
Код: plaintext
1.
using obj_id_type = std::result_of_t<decltype(&O::id)(O*)>;



Суть в том что вы должны синтаксически как бы "вызвать" тип указателя внутри result_of, передавая ему типы аргументов в (). Для методов, первый тип-аргумент должен быть указателем на сам класс.
...
Рейтинг: 0 / 0
20.05.2016, 11:31
    #39239840
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
Anatoly Moskovsky, о, супер, спасибо..

MasterZiv, да, я бы с радостью, но мне нужно потом метод шаблонного класса объявить с этим типом возращаемого значения. и как параметр тоже использовать..

я сейчас сделал по другому, менее удобно - чтобы этот тип был приводимым к одному общему типу. и у всех параметров шаблона должен быть метод id результат которого можно привести к определенному типу.. так конечно менее удобно, потому что это ограничивает фукнции :)


получается, что если я говорю decltype(&O::id) , то я получаю как бы тип этой функции, который только деклирирован ,но нигде не определен, а если я её синтаксически вызываю, то получаю саму функцию, так что ли?
...
Рейтинг: 0 / 0
20.05.2016, 12:22
    #39239898
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
alexy_blackполучается, что если я говорю decltype(&O::id) , то я получаю как бы тип этой функции, который только деклирирован ,но нигде не определен, а если я её синтаксически вызываю, то получаю саму функцию, так что ли?

Да просто std::result_of ожидает аргументы в формате <F(Argtypes...)>
Об этом прямо написано в доке
http://en.cppreference.com/w/cpp/types/result_of

Т.е. скобочки с типами должны присутствовать синтаксически.
Почему такое требование - не знаю, возможно внутри это используется для преобразования типов аргументов в значения, и последующей подстановки в вызов и выведения типа возврата через decltype().
...
Рейтинг: 0 / 0
20.05.2016, 16:37
    #39240275
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить возращаемый тип функции класса
Anatoly Moskovsky,

хм.. и правда ,надо было получше туда посмотреть.
только вот странно - там первый параметр указывается как просто C, вместно указателя на C (последний static_assert в примере).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / получить возращаемый тип функции класса / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]