2012-01-23 103 views
7

我想使用地圖的C++ 11 emplace()函數,但NetBeans說地圖沒有這樣的功能。看看頭文件,這是「正確的」 - 沒有提到(在Fedora 16上)emplace()。這是一切都很好,你知道...但我有點想使用emplace()。std :: map :: emplace()缺少 - 過期的庫?

我該如何去啓用此功能?我知道自從去年3月以來它已經存在,可能更早。徹底的搜索表明,emplace()基本上只存在於我的系統中的列表和向量的標題中。由於近十年來對C++的重大修改,我沒有找到有關如果庫「錯誤」應該怎麼做的文檔。

+1

@CharlesBailey:他想說的是「因爲在C++ 11之前十年沒有重大修改,我不知道人們通常在這種情況下做什麼」 – PlasmaHH

+0

你正在使用什麼編譯器,以及哪個版本? –

+0

@David Brown GCC 4.6.2,但我希望它也可以在我的服務器上編譯(GCC 4.4.5)。 – DigitalMan

回答

2

如果您實現不支持的東西,你有兩個選擇:

  • 不使用該功能
  • 使用支持你所需要的另一種實現方式。

事實上,有一個新的標準並沒有擴大選擇範圍。實際上,它會減少它,因爲在尋找一個支持所有目標實現的實現方面會遇到更多困難。

請注意,對於純庫的情況,其他實現可能是您所做的:兼容性包裝在轉換時間中具有增加的外觀。但是您必須注意名稱衝突效應(當功能出現在其標準位置時,兼容性包裝的可見性可能會給代碼添加歧義)。

+0

因此,如果我正確地理解了這一點,「GNU ISO C++庫」只是不支持該功能呢?有什麼方法可以檢查我的實現版本是否是最新版本?有人在某個地方已經開始工作(沒有遇到過這個問題),我只是不知道他們在使用什麼。 – DigitalMan

+0

@DigitalMan - 許多C++ 11支持都針對GCC 4.7,因爲庫中存在嚴重的API不兼容問題。 –

+0

@Bo Persson感謝您的提示。從[GCC 4.7版本說明](http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x),對關聯容器的支持是部分的 - 缺少emplace成員。 _只是安置會員。在這裏插入所有的咒罵方式。 – DigitalMan

1

GCC 4.7不支持此功能,因爲當時標準存在未解決的問題。它在4.8和更高版本中實現。你將需要-std = C++ 11