C++標準庫中的哪些模板(如果有)具有一個或多個模板模板參數?C++標準庫中的模板模板參數?
如果有很多,那麼幾個例子是好的。
如果C++版本很重要,那麼C++ 14/C++ 1y的最新草案會被優先考慮。
C++標準庫中的哪些模板(如果有)具有一個或多個模板模板參數?C++標準庫中的模板模板參數?
如果有很多,那麼幾個例子是好的。
如果C++版本很重要,那麼C++ 14/C++ 1y的最新草案會被優先考慮。
我不知道C++標準庫中的任何模板被指定爲模板模板參數,但在C++ 11中至少有一個標準模板,其中部分專用帶有模板模板參數:std::pointer_traits
。 std::pointer_traits<Ptr>::element_type
被指定爲:
Ptr::element_type
如果存在這樣的類型;否則,T
如果Ptr
是SomePointer<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;
};
嚴格地說,一個實現必須符合描述的行爲,在這種情況下,它沒有明確提到部分專業化。他們可以這樣做,以便他們可以例如選擇執行磁鐵。在任何一種情況下,用戶都不能檢測是否存在這種專業化。 – 2014-08-29 01:18:22
某些容器模板具有模板構造函數。 – GingerPlusPlus 2014-08-28 22:01:10
@GingerPlusPlus:構造函數模板不是模板模板參數。 – 2014-08-28 22:01:59
我認爲STL中沒有模板模板參數模板。因爲這會打破'Containers <->迭代器<->算法'的哲學。 – 101010 2014-08-28 22:05:00