[英]Is there a way to create function template specialization for std::array
我有一個功能模板
template<typename T>
void output(T& value)
{
}
有沒有一種方法可以為輸出std :: array對象創建專用化? 是的,我知道,不同大小的數組是不同的類型。 )我只是希望c ++ 11中有辦法
template<class T, unsigned N>
void output(std::array<T,N>& value){
}
因為不鼓勵專業化,所以您將要使用它。 而且,您不能部分專門化功能模板。
您不能對所有數組都進行專門化,這需要模板的“部分專門化”。 模板的完全專業化會固定所有模板參數的值(在這種情況下,只有一個T
,因此完全專業化只能覆蓋一種類型來代替T
)。 部分專業化涵蓋模板參數的多個可能值(在這種情況下,我們要覆蓋任何std::array<U,N>
代替T
),因此部分專業化具有自己的模板參數。
C ++允許對類模板進行部分專業化,但不允許對功能模板進行部分專業化。
相反,您可以使其過載。 您定義了另一個具有相同名稱和不同參數的功能模板:
template <typename T, size_t N>
void output (const std::array<T,N> &arr); // I guess "const" by the function name
您需要重載 ,而不是專門化(功能模板只有完全專門化)。
template <typename T, size_t N>
void output (std::array<T,N> &arr);
但是,您不允許將其放入namespace std
。 而且,如果僅輸出數據,則不應傳遞非常量引用。
但是,請遵循標准庫所遵循的路線,而應使用迭代器:
template <typename Iter>
void output (Iter it, Iter end)
這使您的函數可以靈活使用容器類型:可能不需要知道它是list
, deque
還是array
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.