2016-05-03 10 views
1

Ich möchte dieseWie schreibe ich einen Methodenzeiger mit der C++ 11 Syntax?

class A { 
    ... 
}; 
typedef void (A::*MethodPtr)(); 

mit using schreiben. Wie würde ich das tun?

Würde die Antworten sowohl mit als auch ohne type_traits zu schätzen wissen.

(Die Antwort auf normale Funktionen finden Sie hier: How do I typedef a function pointer with the C++11 using syntax?)

+2

Welche Vorteile hat 'type_traits'? Ich kann mir nicht vorstellen, warum du es benutzen willst. – anatolyg

+8

Siehe http://stackoverflow.com/questions/16498969/how-do--typedef-a-function-pointer-with-the-c11-using-syntax für, wie es dort hilft. Ich kann mir vorstellen, dass es auch hier helfen könnte. – Danra

Antwort

6
using MethodPtr = void (A::*)(); 

Ganz ähnlich einen Funktionszeiger, in der Tat.

1
using MethodPtr = void (A::*)(); 
1

Es gibt nichts in <type_traits>, die hier direkt hilfreich ist (man von einem Zeiger auf Elementfunktion zu einer Funktion gehen könnte, aber nicht umgekehrt). Aber wir konnten unsere eigenen Mitglieds Version des add_pointer schreiben:

template <class C, class T> 
using mem_ptr_t = T C::*; 

So einen Zeiger auf A zu schaffen, die eine Funktion des Typs void() ist nur:

using MethodPtr = mem_ptr_t<A, void()>; 

Das ist ausführlicher als der einfache Ansatz, aber seit du gefragt hast!

+1

'mem_ptr_t' wäre ein prägnanterer Name. – Yakk

Verwandte Themen