KDE/PIM Zanshin項目在其代碼中的許多位置使用std :: mem_fn,事實證明至少有1個版本的Apple鏗鏘聲(隨OS X 10.9提供的最新Xcode附帶的聲明)會生成無法鏈接多個相關文件的目標代碼。創建一個通用的包裝,返回std :: mem_fn或boost :: mem_fn
事實證明,通過使用boost::mem_fn
而不是std::mem_fn
可以規避該問題。該項目的主要作者並不傾向於增加對所有平臺的增強依賴性,所以我提出了一個補丁,其中使用了一個條件宏,在需要時可擴展到boost::mem_fn
。
請求現在是創建一個生活在殘心自己的命名空間中的一個(Utils::mem_fn(f)
)模板的功能和返回要麼std::mem_fn(f)
或boost::mem_fn(f)
。這是高於我目前的薪酬水平的部分......或者,這根本不可行,因爲我幾乎不理解mem_fn函數的用途。
所以問題是:有沒有一個容易,緊湊的方式來包裝std::mem_fn
,理想情況下與一個單一的模板功能?
主要障礙似乎是返回類型,但由於zanshin代碼中的所有用法似乎返回歸結爲函數指針,我嘗試使用返回類型void*
。我預計會失敗,事實上它確實如此。
澄清:「boost依賴」是「必須安裝boost以構建項目」的簡寫,而不是爲了建議運行時依賴。我認爲「他」更喜歡在OS X上增加對boost的依賴關係的原因是我們很可能在這裏處理編譯器錯誤。所以這個問題應該自己解決;不使用boost :: mem_fn,意味着代碼將繼續使用std :: mem_fn。 – RJVB