可變參數範本中「...」標記的語法規則
在C 中,可變參數範本可以建構接受參數數量可變。 「...」標記在此上下文中起著至關重要的作用,充當參數包或參數解包器。
省略號放置的語法規則
The “...”標記的位置決定了其功能:
範例:帶有「...」的可變參數模板
考慮以下可變參數範本:
<code class="cpp">template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); }</code>
在此範例中,「...」充當參數包,而函數實作中的「...」將參數解包到args 變數中。
省略號放置不同的原因
模板參數列表和參數列表之間省略號位置的差異是由於參數打包和參數解包之間的區別造成的。在模板參數清單中,「...」表示參數應打包為單一參數包,而在參數清單中,「...」表示參數應解包為單獨的參數。
解包模式
當「...」作為解包器出現在表達式的右側時,它遵循特定的模式:
進階用法:初始化陣列
省略號也可用於初始化陣列:
<code class="cpp">struct data_info { boost::any data; std::size_t type_size; }; std::vector<data_info> v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}</code>
這會使用值初始化向量v,其中每個元素都是包含args 和sizeof 的結構體(T) 對。
總之,可變參數範本上下文中的「...」標記既充當參數包又充當參數解包器,遵循放置和解包模式的特定語法規則。其靈活的使用方式允許強大的模板構造和定制。
以上是如何使用「...」標記來打包和解包 C 變數範本中的參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!