Ich bin ein Modul-Level-Funktionsaufruf mit einem Factory-Funktion mit einem Registry-Klasse registrieren:G ++ 4.9 - Funktion bei Modulbereich wird nicht aufgerufen?
static Controller * ctor(Device * device, const char *) { return new NullController(device); }
static int s_id = DeviceRegistry::RegisterControllerClass("null", ctor);
//------------------------------------------------------------------------------
NullController::NullController(Device * device)
: Controller(device, "null", s_id)
{
}
wo zB :: DEV :: DeviceRegistry :: RegisterControllerClass() ist eine freie Funktion im Namensraum zB und DEV. Dies funktioniert gut unter Visual Studio, aber der Code scheint nicht aufgerufen zu werden, wenn er unter GCC/Linux ausgeführt wird. Wenn ich die RegisterControllerClass() breakpoint, wird er nicht aufgerufen. Nur für den Fall, dass der Compiler das Feld s_id optimiert hat, habe ich es verwendet, um die Basisklasse zu konstruieren. Ich bin mir sicher, dass es das nicht ist. Was ist mit diesem Code falsch?
Sie müssen sicherstellen, dass die Übersetzungseinheit verknüpft ist. Eine Möglichkeit besteht darin, eine Funktion von 'main' aufzurufen. –
Was ist der Modulumfang? – NathanOliver
Innerhalb der Übersetzungseinheit (dh die cpp-Datei + inklusive Header). Wären sie nicht als "statisch" gekennzeichnet worden, hätte ich "global" gesagt. –