Я пытаюсь найти способ в C ++ 17 сократить следующие вызовы функций:
GetCurrentContext()->GetEntityManager()->CreateEntity();
может быть что-то вроде:
EM()->CreateEntity();
Я попробовал указатель на функцию, но это допустимо только для статических функций:
constexpr auto &EM = GetContext()->GetEntityManager;
// error: reference to non-static member function must be called;
Есть ли лучшее решение, чем использование макроса?
#define EM GetContext()->GetEntityManager
При использовании вызова встроенной функции, я боюсь, что компилятор проигнорирует это, и у меня есть ненужные накладные расходы:
inline EntityManager* EM() { return GetCurrentContext->GetEntityManager(); }
Также кажется, что это неправильный путь, потому что я ищу псевдоним, а не другую функцию для определения.
EDIT:
Каждый контекст имеет EntityManager, и текущий контекст может изменяться во время выполнения. Так что я действительно ищу псевдоним, а не константный указатель на то, что возвращает функция.
UPDATE:
Я нашел этот Вопрос. С типом возврата auto встроенная функция становится независимой от исходного типа возврата. Даже если исходная функция будет изменена в будущем, псевдоним больше не нужно трогать. А с уверенностью в оптимизации компилятора это действительно станет настоящим псевдонимом.
Так что я думаю (с учетом ответов и комментариев) лучшее решение - сделать следующее:
inline decltype(auto) EM() { return GetCurrentContext()->GetEntityManager(); }