2014-07-22 47 views
2

在C++中,我希望能夠在不加載動態庫的情況下模擬「插件」。我發現了一種將靜態庫中的函數連接到可執行文件而無需引用它的方法,但我不確定這是否正確。調用沒有入口點的代碼

由於全球性的符號翻譯單元main函數之前初始化,我可以寫類似:

int _ = []() 
{ 
    std::cout << "hook" << std::endl; 
    return 0; 
}(); 

拉姆達+ IIFE模式+ safe initialisation作品的結合,但因爲我從來沒有遇到過的那種技術,我擔心未定義的行爲或編譯器特定的細節。有更好的嗎?

回答

0

你顯示的是合法的C++。通常,可以使用全局變量的初始化來運行main()之外的代碼。有些警告,即「static initialization order fiasco」 - 正如您提供的鏈接中所述。

你還沒有看到它,因爲它皺起了眉頭。您正在使用全局變量在main()之外運行代碼。許多這樣的嘗試都以失敗告終。