2015-07-29知識 在C++11移除Concept的時候,Michael Wong曾經說過一句話:"I am sure this will not be the last we will hear of it." 而在C++17加入Concept的時候,Eric Niebler發了這麽一條Twitter 對於C++的Concept來說,其核心觀點就在於對樣版參數進行約束,抽象出來了一個Concept賦予樣版參數進行約束(而我更認為是有了一層"類別系統"),例子可以參見我這裏的一個回答 電腦發展史上有哪些偉大的思想和技術? - 藍色的回答 ,而有了這層「類別系統」以後,你就可以如普通的類別一樣,進行類別多載,如 vector < int > v { ... }; multiset < int > s { ... }; auto vi = find ( v , 7 ); // calls sequence overload auto si = find ( s , 7 ); // calls associative container overload 而非再考慮使用SFINAE。 有了這一層「類別系統」,也可以有效的改善錯誤提示資訊,因為現在的樣版參數有了「類別」了,而不是再一層一層的向下轉換,直到int, char等具體類別才停下來。而樣版如今的痛苦早在Bjarne書寫【C++語言的設計與演化】的時候就意識到了,然而很遺憾的是,正式開始想辦法解決這個問題是直到2000年才開始,而更遺憾的是C++11把這個給斃掉了。所幸在Andrew Sutton, Bjarne, STL之父Alex,印第安納大學若幹愛好者等人的努力下,重新設計Concept,最終在C++17進入。 對於Concept來說,很容易與Java, C#的interface比較,然而它們是不同的,因為Concept與Concept之間沒有interface那樣的繼承關系。 而有了Concept以後,STL也將會使用Concept重寫,所以即使你不直接使用Concept,你也能享受到Concept的好處。 而有關Concept的討論,我在幾個月前在Reddit上看到了一個非常好的討論,在這裏麪包括了Concept的提案與GCC Concept的實作者Andrew Sutton的一些討論與回復,可以參考一下: Eric Niebler on Twitter: "The Concepts TS was voted out today! Concepts are (almost) an ISO standard. Congrats, A. Sutton. This will change everything. @isocpp #cpp" : cpp
在C++11移除Concept的時候,Michael Wong曾經說過一句話:"I am sure this will not be the last we will hear of it." 而在C++17加入Concept的時候,Eric Niebler發了這麽一條Twitter 對於C++的Concept來說,其核心觀點就在於對樣版參數進行約束,抽象出來了一個Concept賦予樣版參數進行約束(而我更認為是有了一層"類別系統"),例子可以參見我這裏的一個回答 電腦發展史上有哪些偉大的思想和技術? - 藍色的回答 ,而有了這層「類別系統」以後,你就可以如普通的類別一樣,進行類別多載,如 vector < int > v { ... }; multiset < int > s { ... }; auto vi = find ( v , 7 ); // calls sequence overload auto si = find ( s , 7 ); // calls associative container overload 而非再考慮使用SFINAE。 有了這一層「類別系統」,也可以有效的改善錯誤提示資訊,因為現在的樣版參數有了「類別」了,而不是再一層一層的向下轉換,直到int, char等具體類別才停下來。而樣版如今的痛苦早在Bjarne書寫【C++語言的設計與演化】的時候就意識到了,然而很遺憾的是,正式開始想辦法解決這個問題是直到2000年才開始,而更遺憾的是C++11把這個給斃掉了。所幸在Andrew Sutton, Bjarne, STL之父Alex,印第安納大學若幹愛好者等人的努力下,重新設計Concept,最終在C++17進入。 對於Concept來說,很容易與Java, C#的interface比較,然而它們是不同的,因為Concept與Concept之間沒有interface那樣的繼承關系。 而有了Concept以後,STL也將會使用Concept重寫,所以即使你不直接使用Concept,你也能享受到Concept的好處。 而有關Concept的討論,我在幾個月前在Reddit上看到了一個非常好的討論,在這裏麪包括了Concept的提案與GCC Concept的實作者Andrew Sutton的一些討論與回復,可以參考一下: Eric Niebler on Twitter: "The Concepts TS was voted out today! Concepts are (almost) an ISO standard. Congrats, A. Sutton. This will change everything. @isocpp #cpp" : cpp