2011-11-26 80 views
1

我最近開始使用boost和Qt。我想知道是否所有的Boost庫(頭文件)都被封裝到一個名稱空間中:Boost?或者還有其他一些命名空間?Boost和Qt庫中有哪些名稱空間標識符?

同樣的問題Qt,它看起來像Qt庫沒有名稱空間呢? 所以我已經開始構建Qt與這些標誌:

配置-shared -debug和釋放-ltcg -qtnamespace QT NMAKE

,可以嗎?

+0

Boost佔位符在一個未命名的名稱空間中定義,所以「所有boost庫」都不在一個名稱空間中。我不知道還有什麼其他的反例。 –

回答

0

是的,Boost庫通常會把它們的東西放在boost的命名空間或其子名稱空間中。一些可能會定義全局符號,但文檔會告訴你是否是這種情況。

Qt對命名空間的使用非常有限。它傾向於使用Q或Qt爲其所有符號加上前綴,儘管它爲某些標識符使用Qt名稱空間,也可能使用其他一些標識符。

+0

感謝大家的澄清! – codekiddy

1

一般來說,是的 - 所有的boost聲明都在全局的::boost命名空間下。

但是,我知道一個例外:

綁定表達式佔位符_1_2等是一個全球性的「匿名」的命名空間,並因此正確的引用:

boost::bind(&f, ::_1, ::_2); 

注這些佔位符沒有外部鏈接並且是靜態的(對翻譯單位而言)

1

我已使用boost::matrix::ublas fre但是boost有很多命名空間。你可以運行哪些你所關心的具體升壓子目錄中的命令的變化:

grep namespace * | sed -e 's/.*namespace//' -e 's/\/\/.*//' -e 's/ *{.*//' | sort | uniq 

你的問題,通常應該是:什麼命名空間適合使用在我當前的項目?即什麼名字空間看起來有用,但實際上是內部提升的東西

通常,用戶不應該在boost的細節名稱空間內需要任何東西,但是您也可以找到其他用於實現細節的名稱空間。例如,boost::math::tr1什麼都不做,只是導入普通的C數學函數。

相關問題