2016-12-01 5 views
2

Ich versuche, eine statische Methode eines Typs in einem Tupel aufzurufen, aber das Tupel verwendet Zeiger, nicht den Typ selbst. Das heißt, wenn ich tuple_element verwende, bekomme ich einen Zeigertyp, den ich nicht zum Aufrufen der statischen Methode verwenden kann.Zugriff auf statische Eigenschaften eines Zeigertyps

Kann jemand einen Zeigertyp entweder zu seinem Nicht-Zeiger-Äquivalent konvertieren oder auf eine statische Eigenschaft eines Zeigertyps zugreifen?

struct Example 
{ 
    static int example() 
    { 
     return 0; 
    } 
}; 

typedef Example* PointerType; 

int main() 
{ 
    PointerType::example(); // Nope 
    (*PointerType)::example(); // Nope 
    (typename *PointerType)::example(); // Nope 
    (PointerType*)::example(); // Nope 
} 
+0

Nein, das war nur ein Beispiel i – Nonanon

Antwort

4

Sie könnten std::remove_pointer verwenden (da C++ 11), um die Art zu erhalten zeigte auf, z.B. (Beachten Sie std::remove_pointer_t wird unterstützt von C++ 14)

std::remove_pointer_t<PointerType>::example(); 
+0

Dank aus, dies scheint wie genau das Richtige, ich werde es ausprobieren und sehen, ob es funktioniert bearbeiten : Ja, der Compiler erkennt den Typ korrekt. Vielen Dank! – Nonanon

+0

Ich habe gerade angeschaut, wie remove pointer implementiert ist und wow – Nonanon

+0

Seine Implementierung ist nicht komplex; Wenn Sie C++ 11/C++ 14 nicht verwenden können, wäre es einfach, eine selbst zu erstellen. – songyuanyao

Verwandte Themen