boost::tr1與std::tr1沖突了怎么辦?

轉(zhuǎn):http://www.cnblogs.com/rocketfan/archive/2010/12/29/1920943.html

最近用boost::math庫(kù)趾娃,發(fā)現(xiàn)會(huì)和我以前的程序沖突。比如我的程序如果用到

#include 等等std::tr1名字域下的東西。富弦。。

google了下氛驮,原因是boost::tr1設(shè)計(jì)初衷是為了在你的系統(tǒng)沒(méi)有std::tr1標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)的情況下讓你仍然可以在程序中使用std::tr1::unordered_map, std::tr1::tuple等東東腕柜,當(dāng)然了這是一個(gè)work around,也就是你其實(shí)還是用的boost::tuple等等

只是你的代碼寫的時(shí)候可以寫std::tr1::tuple。

比如boost的math庫(kù)的一個(gè)分布函數(shù)的實(shí)現(xiàn)

/usr/include/boost/math/special_functions/detail/igamma_inverse.hpp

在該文件第13行

#include

然后下面它就用到了tuple使用如下

std::tr1::tupleoperator() (constT& x) const? //其實(shí)呢還是用的boost::下面的tuple

看下/usr/include/boost/tr1/tuple.hpp

namespacestd{namespacetr1{using::boost::fusion::tuple;// [6.1.3.2] Tuple creation functionsusing::boost::fusion::ignore;using::boost::fusion::make_tuple;using::boost::fusion::tie;using::boost::fusion::get;// [6.1.3.3] Tuple helper classesusing::boost::fusion::tuple_size;using::boost::fusion::tuple_element; }}

這就是work around的方法矫废。

現(xiàn)在問(wèn)題來(lái)了盏缤,我的GCC已經(jīng)有std::tr1的實(shí)現(xiàn)了,比如 ,那么著就會(huì)帶來(lái)命名沖突了蓖扑,比如同時(shí)又兩個(gè)tuple定義了唉铜。。律杠。潭流。boost::fusion::tuple和原生的std::tr1::tuple竞惋。

見(jiàn)boost::tr1的文檔

實(shí)現(xiàn)

如果 Boost.TR1被配置為使用你的標(biāo)準(zhǔn)庫(kù)中的原生 TR1 實(shí)現(xiàn),則它不需要做多少事情:它只是包含適當(dāng)?shù)念^文件就行了灰嫉。

如果 Boost.TR1 使用了某個(gè)組件的 Boost 實(shí)現(xiàn)拆宛,則它需要包含適當(dāng)?shù)?Boost 頭文件并使用聲明將所需的名字導(dǎo)入到namespace std::tr1中。注意讼撒,只有作為標(biāo)準(zhǔn)部分的聲明會(huì)被導(dǎo)入:本實(shí)現(xiàn)有意非常嚴(yán)格地沒(méi)有將所有 Boost-特有的擴(kuò)展引入到namespace std::tr1浑厚,這是為了能夠捕獲用戶代碼中的任何可移植性錯(cuò)誤。如果你真的需要使用 Boost-特有的擴(kuò)展根盒,則你應(yīng)當(dāng)直接包含 Boost 頭文件钳幅,則改用namespace boost::中的聲明。注意炎滞,本實(shí)現(xiàn)的風(fēng)格并不是完全符合標(biāo)準(zhǔn)的敢艰,它不能將用戶自定義的 TR1 組件的模板特化增加到namespace std::tr1中。還有一到兩個(gè) Boost 庫(kù)尚未完全符合標(biāo)準(zhǔn)册赛,任何與標(biāo)準(zhǔn)不符的地方都已在"TR1 的分類"一節(jié)中說(shuō)明盖矫。不過(guò)幸好,這些不符合標(biāo)準(zhǔn)的行為在實(shí)際中極少會(huì)用到击奶。

如果你使用標(biāo)準(zhǔn)的頭文件包含(在boost/tr1/tr1中)辈双,則這些頭文件名有時(shí)可能與現(xiàn)有的標(biāo)準(zhǔn)庫(kù)頭文件沖突(例如shared_ptr已增加到現(xiàn)有的標(biāo)準(zhǔn)庫(kù)頭文件中而不是它自己的頭文件)。這些頭文件可以用以下兩種方法之一前轉(zhuǎn)到現(xiàn)有的標(biāo)準(zhǔn)庫(kù)頭文件:對(duì)于 gcc柜砾,使用#include_next, 而對(duì)于其它編譯器則使用宏BOOST_TR1_STD_HEADER(header)(在boost/tr1/detail/config.hpp中定義)湃望,它將擴(kuò)展為#include <../include/header>. 對(duì)于大多數(shù)編譯器,這樣就可以直接使用痰驱,但是這意味著這些頭文件不能被放在名為"include"且已在你的編譯器搜索路徑中的目錄下证芭。

怎么解決沖突問(wèn)題呢,還是沒(méi)有完全弄明白担映,不過(guò)解決辦法還是google到了废士。。 OK 解決了就好蝇完。官硝。 以后再說(shuō)。

按理說(shuō)按照boost/tr1/tuple.hpp? 中所寫的

#ifdef BOOST_HAS_TR1_TUPLE#? ifdef BOOST_HAS_INCLUDE_NEXT#? ? include_next BOOST_TR1_HEADER(tuple)#else#? ? include #? ? include BOOST_TR1_STD_HEADER(BOOST_TR1_PATH(tuple))#? endif

我應(yīng)該加一個(gè) #define BOOST_HAS_tR1_TUPLE 就能解決問(wèn)題 因?yàn)?BOOST_TR1_HEADER(tuple)? 會(huì)被轉(zhuǎn)換為#include

但是實(shí)驗(yàn)不成功短蜕。氢架。。朋魔。

usr/include/boost/tr1/tuple.hpp:13:43: error: no include path in which to search for tr1/tuple? //WHY 知道為什么的幫忙告訴我下岖研,謝謝~

//估計(jì)可能是incude_next的原因? 沒(méi)太仔細(xì)看include_next作用TODO

最后google到的解決方案是

#defineBOOST_HAS_TR1_TUPLE 1#include #undefBOOST_HAS_INCLUDE_NEXT? //似乎是需要屏蔽掉 incude_next

好吧 暫時(shí)和平了 費(fèi)了我好多時(shí)間 希望后面誰(shuí)也碰到這種情況的問(wèn)題能節(jié)省下時(shí)間:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末警检,一起剝皮案震驚了整個(gè)濱河市孙援,隨后出現(xiàn)的幾起案子害淤,更是在濱河造成了極大的恐慌,老刑警劉巖拓售,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筝家,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡邻辉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門腮鞍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)值骇,“玉大人,你說(shuō)我怎么就攤上這事移国≈ù瘢” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵迹缀,是天一觀的道長(zhǎng)使碾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)祝懂,這世上最難降的妖魔是什么票摇? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮砚蓬,結(jié)果婚禮上矢门,老公的妹妹穿的比我還像新娘。我一直安慰自己灰蛙,他們只是感情好祟剔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著摩梧,像睡著了一般物延。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仅父,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天叛薯,我揣著相機(jī)與錄音,去河邊找鬼笙纤。 笑死案训,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粪糙。 我是一名探鬼主播强霎,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蓉冈!你這毒婦竟也來(lái)了城舞?” 一聲冷哼從身側(cè)響起轩触,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎家夺,沒(méi)想到半個(gè)月后脱柱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拉馋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年榨为,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌茴。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡随闺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔓腐,到底是詐尸還是另有隱情矩乐,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布回论,位于F島的核電站散罕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏傀蓉。R本人自食惡果不足惜欧漱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葬燎。 院中可真熱鬧硫椰,春花似錦、人聲如沸萨蚕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岳遥。三九已至奕翔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浩蓉,已是汗流浹背派继。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捻艳,地道東北人驾窟。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像认轨,于是被迫代替她去往敵國(guó)和親绅络。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 接著上節(jié) mutex,本節(jié)主要介紹atomic的內(nèi)容恩急,練習(xí)代碼地址杉畜。本文參考http://www.cplusplu...
    jorion閱讀 73,584評(píng)論 1 14
  • 接著上節(jié) atomic,本節(jié)主要介紹condition_varible的內(nèi)容衷恭,練習(xí)代碼地址此叠。本文參考http://...
    jorion閱讀 8,464評(píng)論 0 7
  • 接著上節(jié) condition_varible ,本節(jié)主要介紹future的內(nèi)容随珠,練習(xí)代碼地址灭袁。本文參考http:/...
    jorion閱讀 14,760評(píng)論 1 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)窗看,斷路器茸歧,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 接著上上節(jié) thread ,本節(jié)主要介紹mutex的內(nèi)容烤芦,練習(xí)代碼地址。<mutex>:該頭文件主要聲明了與互斥量...
    jorion閱讀 12,459評(píng)論 2 4