Что означает нотация указателя на функцию, создаваемая std::bind?
Из отладчика вот такую строку не могу прочесть:
std::_Bind<void (SpeechRecognizerPlugin:: *(SpeechRecognizerPlugin *))()>::operator()<, void>()
void()- тип функцииSpeechRecognizerPlugin::*- указатель на членSpeechRecognizerPlugin
А вот это что такое?
(SpeechRecognizerPlugin::* (SpeechRecognizerPlugin*))
И почему параметр шаблона пропущен перед запятой? Как так?
Пример взят из call-stack'а дебаггера. Может быть это особая нотация самого дебаггера?
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Это тип функции, принимающей указатель на SpeechRecognizerPlugin и возвращающей указатель на нестатическую функцию этого класса.
#include <type_traits>
struct SpeechRecognizerPlugin
{};
using VoidFun = void ();
using MemberVoidFunPtr = VoidFun SpeechRecognizerPlugin::*;
using Fancy = MemberVoidFunPtr (SpeechRecognizerPlugin *);
static_assert
(
::std::is_same_v
<
void (SpeechRecognizerPlugin:: *(SpeechRecognizerPlugin *))()
, Fancy
>
);
Параметры вида , void получаются, когда вначале идет пустой пак параметров.
template<typename... Args>
struct Dummy
{
using Type = void;
};
struct Foo
{
template<typename... Args, typename Last = typename Dummy<Args...>::Type>
void operator ()(Args...)
{}
};
int main()
{
Foo foo{};
foo();
}