2016-11-04 46 views
0

在像java這樣的語言中,包名稱是一個域名,例如com.foobar.mystuff。如何知道動態庫或靜態庫中的名稱空間是否已被使用?

所以,如果你擁有com.foobar,那麼很可能有人會使用包名稱com.foobar,你可以合理地確信不會有碰撞。

但在C++中,您可以選擇任何名稱空間名稱。你如何知道你要鏈接到的庫是否已經沒有使用特定的名稱空間名稱?有沒有辦法測試它,特別是如果你無法訪問源代碼或文檔?有一些指導方針可以避免這個問題嗎?

+0

嗯,C++不支持任何反射。 –

+0

選項1:查看頭文件,選項2:瞭解您的編譯器ABI,使用'strings'或其他工具列出所有符號,然後解除其符號 – Danh

+0

@πάνταῥεῖ因此,我應該只使用任何我喜歡的命名空間,直到崩潰? (並使用別名,因此以後很容易更改名稱空間?) –

回答

0

有沒有一些指導方針來避免這個問題?

雖然它可能會讓你大吃一驚地發現,你所使用的第三方庫的一個使用namespace爲您的應用程序,它不應該,如果任何造成太大的問題。

在最壞的情況下,您必須創建一個特定於您的應用程序的namespace,並在主要的namespace下創建嵌套的namespace

相關問題