Author Topic: Umstellung auf C/C++ API bindings 26  (Read 421 times)

remotecontrol

  • Hero Member
  • *****
  • Posts: 590
    • View Profile
Umstellung auf C/C++ API bindings 26
« on: August 23, 2019, 21:43:40 »
Hallo TF Team,

die letzte Änderung der C API verursacht Umstellungsaufwand, das ging aus den Veröffentlichungen so nicht hervor.

Vorher sah mein Code z.B. so aus:
Code: [Select]
temperature_ir_register_callback(getDevice(), TEMPERATURE_IR_CALLBACK_OBJECT_TEMPERATURE, (void*) callback_int16, this);
Und jetzt muss ich wohl schreiben:
Code: [Select]
typedef void (*AnyCallbackFunc) (void);

temperature_ir_register_callback(getDevice(), TEMPERATURE_IR_CALLBACK_OBJECT_TEMPERATURE, (AnyCallbackFunc) callback_int16, this);

Jetzt wird zwar ein Funktionspointer übergeben, aber die Anzahl Argumente der Callback-Funktion ist in der Signatur der "register" Funktionen noch 0, d.h. ich caste dann doch wieder alles weg, was relevant ist, sonst beschwert sich der Compiler. Einen static_cast kann ich dafür auch nicht nutzen, also nach wie vor ein harter Cast.

Mit einem Typedef ist das zwar eine triviale Anpassung, aber die Menge machts - eben alle Stellen wo ein Callback benutzt wird müssen geändert werden ...

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.467
    • View Profile
Re: Umstellung auf C/C++ API bindings 26
« Reply #1 on: August 26, 2019, 14:05:21 »
Hast recht, ich habe das Changelog mal angepasst.

Hier ging es darum die Verwendung von Object Pointern für das Übergeben/Speichern von Function Pointern abzustellen.

Da in C den korrekten Type für alle möglichen Callbacks zu erwarten ist nicht möglich, da C keine Überladung kann.

Das könnte man nur in reinen C++ Bindings lösen.