我使用一個模塊級的函數調用來註冊的註冊類工廠功能:G ++ 4.9 - 模塊範圍內的函數未被調用?
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)
{
}
其中例如:: DEV :: DeviceRegistry :: RegisterControllerClass()是在命名空間如免費功能DEV。這在Visual Studio下運行良好,但是在GCC/Linux上運行代碼似乎沒有被調用 - 如果我斷點RegisterControllerClass(),它不會被調用。爲了防止編譯器優化s_id字段,我使用它來構造基類。所以我相信不是這樣。這段代碼有什麼問題?
您必須確保翻譯單元已鏈接。一種方法是從'main'中調用其中的函數。 –
什麼是模塊範圍? – NathanOliver
在翻譯單元內(即cpp文件+包含的標題)。如果他們沒有被標記爲「靜態」,我會說'全球'。 –