簡體   English   中英

有沒有一種方法可以為std :: array創建功能模板專業化

[英]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) 

這使您的函數可以靈活使用容器類型:可能不需要知道它是listdeque還是array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM