2010-09-19 37 views

回答

7

是的。實際上,由於Lambda表達式創建本地未命名類型,因此此規則更改使Lambda表達式成爲可能。

對不起,我誤解你的問題。我以爲你在談論使用本地類作爲模板參數。這在C++ 98和C++ 03中是不允許的,但它可以在C++ 0x中工作。

至於你的實際問題,C++ 0x不會改變任何這一點。

老實說,我看不出有什麼理由讓「功能,本地類模板」。對「功能本地類模板」的支持是一種可能只有少數人關心的功能。在函數之外編寫類模板是可接受的替代方案。這顯然不會給編譯器廠商帶來足夠的壓力,無論實現這樣的功能有多複雜。編譯器供應商可能更關心實現其他C++ 0x功能。

但我理解你的觀點。這看起來可能是不必要的不​​規範的語言。如果你非常關心這個特性,你可以寫出一個正式的提案,並在兩年內將它發送給C++標準化委員會,當時他們可能會接受「C++ 1y」的提案。

+13

相反,我沒有看到拒絕本地模板類的理由。我不知道爲什麼這在標準C++中被禁用 – valdo 2010-09-19 21:18:37

+0

@valdo:你有沒有編寫過編譯器?或瀏覽編譯器的代碼?從可用性的角度來看,它可能是很好的,但是從編譯器編寫者的角度來看,它爲適當的功能增加了不必要的複雜性:它不值得。 – 2010-09-20 06:50:58

+0

@Matthieu M:如果你從頭開始設計它可能並不難,但這基本上是一個遺留問題。函數範圍來自C,並且代碼可能獨立於名稱空間。但是如果你已經將函數實現爲一種名稱空間,那麼這些特性將免費。 – MSalters 2010-09-20 07:33:08