komisches typedef
-
typedefs auf funktionspointer unterschieden sich etwas von solchen auf datentypen.
typedef int xy;hier ist int der alte datentyp, xy der neue name dafür. bei funktions- oder methodenpointern ist der neue namen innerhalb des alten datentyps.
typedef void (Class::*Method)();"Method" ist der neue name: "void (Class::*)()" ist der alte datentyp: es ist eine funktion mit rückgabetyp void und ohne parameter.
-
namenlos schrieb:
typedefs auf funktionspointer unterschieden sich etwas von solchen auf datentypen.
Nein, nicht im geringsten.
Dein Beispiel ist grob irreführend, weil int ein primitiver Datentyp ist, ein Methodenzeiger ein komplexer. Gegenbeispiel:
typedef void (Class::*type)[10];
-
Bashar schrieb:
Gegenbeispiel:
typedef void (Class::*type)[10];Das geht nicht
So aber z.B.:typedef int (Class::*type)[10];Für alle, die das nicht lesen können: das deklariert einen Typen type, der einen Zeiger auf ein Member der Klasse Class vom Typ Array aus 10 ints darstellt.
-
camper schrieb:
Das geht nicht

Oops, ich wollte erst was mit void-Pointern machen und hab dann den Faden verloren

-
template<typename obj> class MenuEntryMethod : public MenuEntry { obj const& m_obj; function m_fnptr; public: typedef void (obj::*function)(); void operator()() { (m_obj.*m_fnptr)(); } MenuEntryMethod(obj const& inst, function func, std::string const& name) : m_obj(inst), m_fnptr(func), MenuEntry(name) {} };würde ich es am ehesten logisch strukturieren. Aber zu Funktionszeigern guck einfach mal: www.function-pointer.org

-
@Bashar
könntest du ein beispiel schreiben, wie du den type dann verwendest?
-
struct Class { int x[10], y[10]; }; Class a; typedef int (Class::*type)[10]; type z = &Class::x; int i = (a.*z)[0];
-
ohje...und ich dachte schon, ich wäre halbwegs fit was cpp angeht :-0
Aber das hier stimmt doch noch oder?
namenlos schrieb:
typedef void (Class::*Method)();"Method" ist der neue name: "void (Class::*)()" ist der alte datentyp: es ist eine funktion mit rückgabetyp void und ohne parameter.
-
Method ist dann eine Memberfunktion von Class mit Rückgabewert void und erwartet keine Parameter. Korrekt.
-
(D)Evil schrieb:
Method ist dann eine Memberfunktion von Class mit Rückgabewert void und erwartet keine Parameter. Korrekt.
*Klugsch... Modus on* Fast - Method ist ein Zeiger auf eine Memberfunktion
