2014-08-28 69 views
7

C++標準庫中的哪些模板(如果有)具有一個或多個模板模板參數?C++標準庫中的模板模板參數?

如果有很多,那麼幾個例子是好的。

如果C++版本很重要,那麼C++ 14/C++ 1y的最新草案會被優先考慮。

+0

某些容器模板具有模板構造函數。 – GingerPlusPlus 2014-08-28 22:01:10

+7

@GingerPlusPlus:構造函數模板不是模板模板參數。 – 2014-08-28 22:01:59

+0

我認爲STL中沒有模板模板參數模板。因爲這會打破'Containers <->迭代器<->算法'的哲學。 – 101010 2014-08-28 22:05:00

回答

7

我不知道C++標準庫中的任何模板被指定爲模板模板參數,但在C++ 11中至少有一個標準模板,其中部分專用帶有模板模板參數:std::pointer_traitsstd::pointer_traits<Ptr>::element_type被指定爲:

Ptr::element_type如果存在這樣的類型;否則,T如果PtrSomePointer<T, Args>形式的類模板實例化,其中Args是零個或多個類型參數;否則, 專業化是格式不正確。

爲了實現這個,你需要一個SomePointer的模板模板參數,因爲它可以是一個任意的類模板(只要它只有類型模板參數)。下面是libstdC++ helper類的部分專業化,例如:

template<template<typename, typename...> class _SomePtr, typename _Tp, 
      typename... _Args> 
    struct __ptrtr_elt_type<_SomePtr<_Tp, _Args...>, false> 
    { 
     typedef _Tp __type; 
    }; 
+3

嚴格地說,一個實現必須符合描述的行爲,在這種情況下,它沒有明確提到部分專業化。他們可以這樣做,以便他們可以例如選擇執行磁鐵。在任何一種情況下,用戶都不能檢測是否存在這種專業化。 – 2014-08-29 01:18:22