8

例如,爲了說明的緣故,我們假設找到了一​​個整型向量的更高效的(存儲,操作)實現(與通用向量實現相比)。一個標準的遵守庫可以做類似的事情:標準庫實現可以專用於標準類型嗎?

template <class T, class A, class Enable = void> 
class vector { ... }; 

template <class T> 
class vector<T, A, std::enable_if_t<std::is_integral<T>::value>> { ... }; 

我認爲這將是非法的,因爲額外的模板參數。

但對於一個小的編譯器魔術:(除了額外的實施工作)將類似的東西被允許:

  • vector<integral_type, A>內部映射class vector_integral<T, A>
  • vector<anything_else, A>內部映射class vector<T, A>

- 這顯然不是在標準中明確提到的專業化,像std::vector<bool>

- 專業化顯然具有相同的接口和觀察到的行爲。

- 讓我們忽略concepts,因爲他們還沒有標準。除非你有一些事實。

- 這是一個純學術問題(個人的好奇心)。

回答

1

只要標準庫實現符合標準發佈的保證,就可以進行專業化。這些保證顯然包括增長複雜性,接口功能以及某些類別數據的內部佈局。

據我所知,vector<bool>專業化是因爲其內部數據佈局不同於通用的vector<T>庫類,因此需要標準明確允許專業化。

立場明確表示17.5.1.4廣告。 7

庫條款中指定的複雜性要求是上限,而提供更好複雜性保證的實現滿足要求。