Chciałbym napisać tenJak napisać wskaźnik funkcji za pomocą składni C++ 11?
typedef void (*FunctionPtr)();
użyciu using
. Jak to zrobić?
Chciałbym napisać tenJak napisać wskaźnik funkcji za pomocą składni C++ 11?
typedef void (*FunctionPtr)();
użyciu using
. Jak to zrobić?
Chcesz type-id
, który jest w zasadzie dokładnie taki sam jak deklaracja, z wyjątkiem usunięcia declarator-id
. declarator-id
jest zwykle identyfikatorem i nazwą, którą deklarujesz w deklaracji równoważnej.
Na przykład:
int x
declarator-id
jest x
tak po prostu usunąć go:
int
Podobnie:
int x[10]
Zdjąć x
:
int[10]
Dla przykładu:
void (*FunctionPtr)()
Tutaj declarator-id
jest FunctionPtr
. tak po prostu usunąć go, aby uzyskać type-id
:
void (*)()
To działa, ponieważ dali type-id
zawsze można jednoznacznie określić, gdzie identyfikator pójdzie do tworzenia deklaracji. Z 8.1.1 w normie:
Możliwe jest jednoznaczną identyfikację położenia w [typu id] Gdy identyfikatorem wydaje jeśli konstrukcja była [zgłoszenia]. Nazwany typ jest wtedy taki sam jak typ hipotetycznego identyfikatora .
A co z tą składnią w celu uzyskania większej przejrzystości?(Uwaga podwójny nawias)
void func();
using FunctionPtr = decltype((func));
Co oznacza podwójne nawiasy w tym kontekst? A * odwołanie * do wskaźnika funkcji? – 0x499602D2
Twój 'FunctionPtr' nie jest wskaźnikiem funkcji, ale' decltype (& f) 'jest, patrz [tutaj] (http://coliru.stacked-crooked.com/view?id=77def487d5ed99885c0523d48c2ae7a1-50d9cfc8a1d350e7409e81e87c2653ba). – rubenvb
@ 1234597890 FunctionPtr jest niestanowiącą wartości stałej lwartość typu 'void()' –
W "brzydota" może być również zabrane jeśli uniknąć typedef-ing wskaźnik:
void f() {}
using Function_t = void();
Function_t* ptr = f;
ptr();
bardzo conf'using' rzeczywiście, zwłaszcza dlatego, identyfikatory wskaźników funkcji zwykle znajdują się w środku instrukcji 'typedef' i przechodzą do przodu za pomocą' using'. Przynajmniej tam jestem stracony. – starturtle