Как получить возвращаемый тип метода члена аргумента шаблона для использования в другом шаблоне arg? - PullRequest
0 голосов
/ 10 апреля 2020

Как я могу получить и использовать тип возвращаемого типа T :: ID () для использования в моих аргументах шаблона?

Должно быть сделано в C ++ 11.

У меня есть подпись шаблона:


template<typename EventType, typename IDType, std::unordered_map<IDType, uint64_t> ObjectRegistry::* MapRef >
uint64_t acquireHandleFromObject(EventType& id)
{
}

Это сопоставляет EventType члену unordered_map в классе ObjectRegistry и выполняет с ним некоторые операции.

Все объекты EventType могут не совпадать base, но будет иметь идентификатор метода, который возвращает класс T ID.

Я предполагаю, что должно быть возможно уменьшить аргументы шаблона и вывести эту информацию из EventType, используя следующее:


template<typename EventType, std::unordered_map<decltype(std::declval<EventType>().ID()), uint64_t> ObjectRegistry::* MapRef >
uint64_t acquireHandleFromObject(EventType& id)
{
}

Но это не работает.

В моем cpp, когда я пытаюсь специализировать новый шаблон подписи intellisense, сообщает, что специализация не возвращается с совпадением:

template uint64_t ObjectRegistry::acquireHandleFromObject<NAMESPACE::SomeEvent, &ObjectRegistry::m_someMap>(NAMESPACE::SomeEvent& event);

Редактировать:

Не важно, я идиот.

T :: ID () возвращает ссылку на класс ID. Мне нужно было использовать std :: decay :: type для decltype.

1 Ответ

0 голосов
/ 10 апреля 2020

Неважно, я идиот.

T :: ID () возвращает ссылку на класс идентификатора, и эта информация не была включена в вопрос.

Мне нужно было использовать std :: decay :: type для decltype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...