powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / получить возращаемый тип функции класса
9 сообщений из 9, страница 1 из 1
получить возращаемый тип функции класса
    #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
получить возращаемый тип функции класса
    #39237037
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black, предположил бы auto использовать, но, подозреваю, это не подойдёт
...
Рейтинг: 0 / 0
получить возращаемый тип функции класса
    #39237092
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, у меня там приватный член данных - std::map<obj_id_type,std::vector<field_ptr>> meta_store_;

пока я только думаю что от него можно избавиться.. но вот код вроде логичный, а не компилится.
...
Рейтинг: 0 / 0
получить возращаемый тип функции класса
    #39237838
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black, я слап в этом, практики почти ноль, но читал Майерса, как раз где-то в этих местах, связанных с шаблонами и привидением типов, есть отличия в C11 и C14, какие-то случаи не компилятся в 11-м
...
Рейтинг: 0 / 0
получить возращаемый тип функции класса
    #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
получить возращаемый тип функции класса
    #39239072
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black,
Код: plaintext
1.
using obj_id_type = std::result_of_t<decltype(&O::id)(O*)>;



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

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

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


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

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


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