可變參數範本中「...」標記的語法規則
在C 中,可變參數範本可以建構接受參數數量可變。 「...」標記在此上下文中起著至關重要的作用,充當參數包或參數解包器。
省略號放置的語法規則
The “...”標記的位置決定了其功能:
範例:有「...」的可變參數範本
考慮以下可變參數模板:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
在此範例中,「...」用作參數包,而函數實作中的「...」將參數解包到 args 變數中。
省略號放置不同的原因
模板參數列表和參數列表之間省略號放置的差異是由於參數打包和參數解包之間的區別造成的。在模板參數清單中,「...」表示參數應打包為單一參數包,而在參數清單中,「...」表示參數應解包為單獨的參數。
解包模式
當「...」作為解包器出現在表達式的右側時,它遵循特定的模式:
高階用法:初始化陣列
省略號也可用於初始化陣列:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
這用值初始化向量v,其中每個元素都是包含args 和sizeof(T) 對的結構體。
結論,可變參數範本上下文中的「...」標記既充當參數包又充當參數解包器,遵循放置和解包模式的特定語法規則。其靈活的使用允許強大的模板構造和定制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3