2016-06-22 20 views
2

Ich bin neu im Programmieren, aber habe diesen Sommer ein Praktikum und ich versuche, diesen Code zum Laufen zu bringen.Zeiger: Was bedeutet diese Codezeile?

Ich gehe durch jemand anderen C++ - Code ("Exact Geodesic für Dreiecksnetze" Open Source) und eine Zeile stolpert mich. Wie auch immer, die Zeile ist wie folgt:

Korrigieren Sie mich, wenn ich falsch liege, aber zuerst ein Zeiger wird initialisiert. Es sieht aus wie

class::pointerclass* thingpointedto = something[something] accessing member mesh(); 

Ich habe keine Ahnung, was der Code auf der rechten Seite des Operanden gleich bedeutet. Kann mir jemand helfen?

+1

Haben Sie einen Tippfehler? Der Zeiger auf den Member-Operator '->' ** kann kein Leerzeichen haben. – Bathsheba

+1

'Algorithmen' ist ein Array/Vektor/Map (oder ein anderer Typ mit einem überladenen' Operator [] '). Es gibt anscheinend einen Zeiger auf etwas mit einem 'mesh()' -Member zurück, das einen anderen Zeiger zurückgibt. –

+2

'Algorithmus' ist ein Array von Algorithmen. 'algorithm_id' ist ein Index (die Nummer eines Algorithmus über alle angegebenen), so dass Sie zuerst einen bestimmten Algorithmus erhalten. Sobald Sie einen Algorithmus bekommen (Vorsicht, es ist nur ein Zeiger auf einen Algorithmus), rufen Sie einfach seine Methode 'mesh()' auf, die Ihnen die Adresse einer berechneten 'Geodätisch :: Mesh'-Struktur zurücksendet. –

Antwort

2

Werfen Sie einen Blick auf das Potenzial source Ich würde sagen, es ist ein std::vector<algorithm_shared_pointer>. Wobei algorithm_shared_pointer ein typedef für boost::shared_ptr<geodesic::GeodesicAlgorithmBase> ist.

geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh(); 

geodesic ist ein Namespace und die Mesh Klasse ist in diesem Namensraum befindet. Wir erstellen einen Zeiger auf diese Klasse. Dem Zeiger wird das Ergebnis des Funktionsaufrufs mesh() zugewiesen, der von geodesic::GeodesicAlgorithmBase aufgerufen werden kann. Die algorithm_id ist eine int, die als Parameter für die Funktion zur Verfügung gestellt wird, die diese Zeile enthält.

Diese ganze Zahl wird verwendet, um den Index im Vektor auszuwählen.


, die in Folge hätte:

namespace::pointerToClass* nameOfPointer 
    = std::vector<boost::shared_ptr<geodesic::GeodesicAlgorithmBase>>[int]->mesh(); 

, das ein sonderbares Stück Code ist wenn man bedenkt es auto aufgrund der mesh() Rückkehr genutzt haben könnte Typ geodesic::Mesh* sein.

2
geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh(); 

Hier algorithms könnte entweder eine Art sein:

  • ein Array Zeiger, in welchem ​​Fall es durch einen integral Typ integer indexiert ist, algorithm_id
  • Ein sequentielles Behälter mit einem Überlast operator[], z. B. std:vector, die mit einem Ganzzahl-Ganzzahl indexiert wird, algorithm_id
  • Eine Assoziative contain r mit einem überladenen operator [], zB std::map, daß mit einem Schlüssel-Typ-Objekt indexiert ist, algorithm_id
  • ein benutzerdefinierter Typ mit einer überladenen operator [], mit einem benutzerdefinierten Typ Objekt indiziert, algorithm_id wie durch seine Unterschrift diktiert

The Array[] Zugriff gibt einen Zeiger (entweder regulären oder Smart-Zeiger) auf ein Objekt zurück, das über die Elementfunktion mesh() verfügt, die einen Zeiger auf geodesic::Mesh Objekt zurückgibt.

Der Rückgabewert von algorithms[algorithm_id] nicht binded zu irgendetwas war vielmehr gehalten als temporäres (wenn es nicht bereits eine Referenz); dann seine Elementfunktion, mesh() heißt