C++ variadic template

來源:互聯網
上載者:User

標籤:types   type   col   its   oid   變化   func   iostream   style   

#include <vector>#include <iostream>#include <tuple>#include <type_traits>using namespace std;template <typename Arg>void process_recursion(Arg&& arg) {    bool lb = std::is_rvalue_reference<decltype(arg)>::value;    if (lb) {        std::cout << "右值=" << arg << ",";    }    else {        std::cout << "左值=" << arg << ",";    }}template <typename First , typename... Rest>void process_recursion(First&& first, Rest&&... rest) {    bool lb = std::is_rvalue_reference<decltype(first)>::value;    if (lb) {        std::cout << "右值=" << first << ",";    }    else {        std::cout << "左值=" << first << ",";    }    process_recursion(rest...);}int main() {    int a = 0;    process_recursion(1,a);}

 typename ... Args是變長參數包,Args... args是最簡單的一種拆包形式。

對於函數模板 template < typename... Args >  void test(Args... args); 

當調用test(1,‘F‘)時,依次進行實參推演,1被推演成int,‘F’被推演成char,則模板函數被具體化為void test(int ,char);

拆包還有更多的變化,對於template < typename... Args >  void test(Args&&... args); 按照萬能引用規則拆包。規則見《Effective Modern C++》條款1.

當調用int x=0; test(x,‘F‘)時,依次進行實參推演,x被推演成int&,‘F’被推演成char&& , 則模板函數被具體化為void test(int& ,char&&);

 

1 template <typename... Types> void func1(std::vector<Types...> v1);   2 3 template <typename... Types> void func2(std::vector<Types>... v2);  

對於func1, 只有1個參數v1,Types...拆包成vector類的兩個模板參數(一個是所容納的元素類型,另一個是分配器類型)

對於func2,可能有0個或任意多個參數。例如:func2( std::vector<int> ,  std::vector<int>, std::vector<char>   );

C++ variadic template

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.