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
что называют его оператором.