NoneInvoke _result с функцией member (operator[])

Как правильно вызвать invoke_result для функции-члена? Или специально для функции-члена оператора. Я пытался std::invoke_result<T::operator[], size_type> безуспешно Какой будет правильный синтаксис в этом случае?

2 ответа

Решение

Не. использование decltype(std::declval<T&>()[size_type{}]) или что-то подобное (при необходимости измените категорию значения и квалификацию cv).

invoke_result это когда у вас есть вызываемый / вызываемый объект. У вас его нет, поэтому не пытайтесь вбивать квадратные колышки в круглые отверстия.

Как насчет следующего?

std::invoke_result<decltype(&T::operator[]), T, size_type>

Но этот синтаксис должен работать с одним, а не с шаблоном, operator[],

В случае шаблона или перегрузки, вы должны избегать std::invoke_result и следует за decltype() способ, предложенный ТК

Или, может быть, вы можете обернуть вызов в лямбда-функцию и применить std::invoke_result лямбда (если вы действительно, очень хотите использовать std::invoke_result).

Взяв во внимание std::invoke_result Синтаксис, примите во внимание, что указатель на функцию-член - это совершенно разные вещи, по сравнению с указателем на обычную функцию. В любом случае, вы можете грубо видеть его как указатель на обычную функцию, получающую дополнительный аргумент (в первой позиции), соответствующий объекту, который вызывает его метод.

Итак, в вашем примере первый T аргумент представляет объект типа T что называют его оператором.

Другие вопросы по тегам