我最近開始使用boost和Qt。我想知道是否所有的Boost庫(頭文件)都被封裝到一個名稱空間中:Boost?或者還有其他一些命名空間?Boost和Qt庫中有哪些名稱空間標識符?
同樣的問題Qt,它看起來像Qt庫沒有名稱空間呢? 所以我已經開始構建Qt與這些標誌:
配置-shared -debug和釋放-ltcg -qtnamespace QT NMAKE
,可以嗎?
我最近開始使用boost和Qt。我想知道是否所有的Boost庫(頭文件)都被封裝到一個名稱空間中:Boost?或者還有其他一些命名空間?Boost和Qt庫中有哪些名稱空間標識符?
同樣的問題Qt,它看起來像Qt庫沒有名稱空間呢? 所以我已經開始構建Qt與這些標誌:
配置-shared -debug和釋放-ltcg -qtnamespace QT NMAKE
,可以嗎?
是的,Boost庫通常會把它們的東西放在boost
的命名空間或其子名稱空間中。一些可能會定義全局符號,但文檔會告訴你是否是這種情況。
Qt對命名空間的使用非常有限。它傾向於使用Q或Qt爲其所有符號加上前綴,儘管它爲某些標識符使用Qt
名稱空間,也可能使用其他一些標識符。
感謝大家的澄清! – codekiddy
一般來說,是的 - 所有的boost聲明都在全局的::boost
命名空間下。
但是,我知道一個例外:
綁定表達式佔位符_1
,_2
等是一個全球性的「匿名」的命名空間,並因此正確的引用:
boost::bind(&f, ::_1, ::_2);
注這些佔位符沒有外部鏈接並且是靜態的(對翻譯單位而言)
我已使用boost::matrix::ublas
fre但是boost有很多命名空間。你可以運行哪些你所關心的具體升壓子目錄中的命令的變化:
grep namespace * | sed -e 's/.*namespace//' -e 's/\/\/.*//' -e 's/ *{.*//' | sort | uniq
你的問題,通常應該是:什麼命名空間適合使用在我當前的項目?即什麼名字空間看起來有用,但實際上是內部提升的東西
通常,用戶不應該在boost的細節名稱空間內需要任何東西,但是您也可以找到其他用於實現細節的名稱空間。例如,boost::math::tr1
什麼都不做,只是導入普通的C數學函數。
Boost佔位符在一個未命名的名稱空間中定義,所以「所有boost庫」都不在一個名稱空間中。我不知道還有什麼其他的反例。 –