Von einer Klasse mit vielen pure virtual Funktionen ableiten



  • Hallo,

    ich arbeite gerade mit einem C++ Framework. Ich habe eine weitere Klasse von einer abstrakten Klasse mit vielen virtual und pure virtual Funktionen abgeleitet. Wenn ich nun ein Objekt der geerbten Klasse erstellen will, regt sich der Compiler natürlich auf, da nicht alle pure virtual Funktionen implementiert sind, ich brauche aber genau eine einzelne. -.- Kann ich da jetzt irgendetwas machen oder soll ich "zum Spaß" alle anderen mitimplementieren? Sorry für die blöde Frage, aber ich checks grad echt nicht... -.-

    Thx & Lg
    buzzzzz



  • buzz_lightzyearGMX schrieb:

    ich brauche aber genau eine einzelne.

    Wenn das stimmt ist das ein ziemlich merkwürdiges Framework von dem ich die Finger lassen würde.

    Zur Frage: selbstverständlich müssen alle Funktionen implementiert werden.



  • Hallo,

    ok thx hab ich mir gedacht... es handelt sich um ROS-also das Robotic Operating System.

    lg



  • Wenn sie pure virtual ist, dann gibt es vermutlich keine Standardimplementierung die für alle ableitenden Klassen Sinn ergibt. Oder es ist nicht möglich eine Implementierung für die Basisklasse anzugeben.

    Mich würde ja hier der konkrete Fall interessieren.



  • buzz_lightzyearGMX schrieb:

    Hallo,

    ich arbeite gerade mit einem C++ Framework. Ich habe eine weitere Klasse von einer abstrakten Klasse mit vielen virtual und pure virtual Funktionen abgeleitet. Wenn ich nun ein Objekt der geerbten Klasse erstellen will,

    Ich vermute du meinst die abgeleitete Klasse. Die geerbte wäre die Basisklasse. Und dass du von der abstrakten Basisklasse kein Objekt erstellen kannst sollte klar sein.

    buzz_lightzyearGMX schrieb:

    regt sich der Compiler natürlich auf, da nicht alle pure virtual Funktionen implementiert sind, ich brauche aber genau eine einzelne.

    Du verwechselst da was: nicht DU brauchst die Funktion, sondern die Basisklasse braucht sie.

    buzz_lightzyearGMX schrieb:

    Kann ich da jetzt irgendetwas machen

    Ist die Frage ernst gemeint? Erwartest du dir ein "dont be so finicky" Keyword mit dem du den Compiler überreden kannst dir das durchgehen zu lassen?

    buzz_lightzyearGMX schrieb:

    oder soll ich "zum Spaß" alle anderen mitimplementieren? Sorry für die blöde Frage, aber ich checks grad echt nicht... -.-

    Nein, nicht zum Spass. Weil die Basisklasse es von dir verlangt.



  • buzz_lightzyearGMX schrieb:

    Ich habe eine weitere Klasse von einer abstrakten Klasse mit vielen virtual und pure virtual Funktionen abgeleitet. ... ich brauche aber genau eine einzelne.

    Viele virtuelle Funktionen zu erben, obwohl man nur eine braucht - das ist ein Anzeichen für ein sehr schlechtes Design der Bibliothek - oder für ein Missverständnis deinerseits.

    Überprüf mal, ob du das richtig gemacht hast. Hat die abstrakte Klasse, von der du abgeleitet hast, vielleicht selber Basisklassen, und es würde reichen, von einer von denen zu erben?



  • @5cript und @Printe

    Konkret geht es um diese Klasse:

    http://docs.ros.org/jade/api/moveit_core/html/classkinematics_1_1KinematicsBase.html#details

    Die Funktion searchPositionIK würde ich benötigen...

    Thx & LG



  • Und was ist mit pr2_arm_kinematics::PR2ArmKinematicsPlugin (auch wenn dort keine Beschreibung zu steht, was diese Klasse macht)? Diese implementiert ja anscheinend alle pure-virtuellen Funktionen - evtl. einfach davon erben und (nur) die nötige virtuelle Funktion selber implementieren.



  • Da ich vor ein paar Jahren auch mal mit ROS und Roboter Armen gearbeitet habe würde ich behaupten, PR2ArmKinematics ist die Spezialisierung für den PR2 Roboter. Da müsste man schon genau schauen, was man da übernehmen kann.
    Wenn ein darauf aufbauender Planer für irgendwas zum Beispiel die Forward Kinematic benutzt, man aber nicht den PR2 im Einsatz hat, wird das einem ordentlich um die Ohren fliegen.

    @TE: Wenn du den Rest von dem ROS Framework auch benutzen willst, ist es Sinnvoll auch die anderen Funktionen des Interfaces zu implementieren. Sonst kannst du andere Komponenten hinterher nicht richtig einsetzen. Wenn du inverse Kinematic implementieren möchtest, wird die andere Richtung kein Problem sein. Wirst du eh brauchen, denke ich 😉



  • buzz_lightzyearGMX schrieb:

    Die Funktion searchPositionIK würde ich benötigen...

    Hier stellt sich wieder die Frage ob Du auch alles verstanden hast.
    Denn nicht Du *benötigst* die Funktion, sondern dass Framework. Du *implementierst* die Funktion. = Du definierst das Verhalten deiner Instanz gegenüber dem Framework.
    Wahrscheinlich macht es keinen Sinn die ganzen anderen Verhalten, die das Framework offensichtlich auch noch verlangt, nicht zu definieren, weil deine Instanz dann ein ziemlicher Krüppel wäre mit dem man (das Framework) nichts weiter anfangen kann.



  • @Schlangenmensch:

    ja, die inverse Kinematik ist auch ein Thema... Wie sollte das mit der IK dann funktionieren? sorry versteh ich grad nicht ganz... -.- 🙂 sonst mach ich mal die um das Ganze ein bisschen besser zu verstehen...

    lg



  • Naja, du hast geschrieben, dass du searchPositionIK benötigst und laut Doku ist die dafür vorgesehen, dass die eben eine Lösung der IK zurück gibt. Und die Lösung ist halt abhängig von dem konkreten Arm mit dem du arbeitest.

    Ich glaube inzwischen, wie scrontch, das du da was falsch verstanden hast.

    Wenn du von einer Klasse mit pure virtual Funktionen ableitest, dann muss du die selber programmieren. Das ist das Konzept von pure virtual.

    Wenn du jetzt von KinematicsBase ableitest, musst du du eben die Invese Kinematic, die normale Kinematische Kette und die Callback Funktion implementieren.
    Die Umsetzung vom PR2 ist, wenn ich mich recht erinnere, Open Source. Da könntest du also rein gucken, um dir eine Inspiraton zu holen.

    Die Funktion searchPositionIk muss im Prinzip deinen IK Solver aufrufen und eine Lösung zurück geben. Wobei zu beachten ist, dass genau eine Lösung zurück gegeben wird, wobei es für eine IK im allgemeinen belibieg viele Lösungen geben kann.



  • Ok, thx für deine/eure Hilfe! 🙂

    lg
    buzzz