C++中非類型模板參數(nontype template parameters) 的使用

來源:互聯網
上載者:User

非類型模板參數(nontype template parameters), 可以使用整數型別(integral type),指標(pointer) 或者是 引用(reference);

綁定非類型整數形參(nontype integral parameter) 的 實參(argument) 必須是常量運算式(constant expression, constexpr);

不能把普通的局部對象或者動態對象 綁定 指標或引用的非類型形參, 可以使用全域類型進行綁定;

關於類模板(class template)中非類型模板參數的寫法,參見: http://en.cppreference.com/w/cpp/language/class_template

下面例子包含了模板類型是 整型, 指標, 引用, 函數指標 的函數的常見寫法;

注意指標和引用的實參是全域變數;

代碼如下:

//=====================================  // Name        : CppPrimer.cpp  // Author      : Caroline  // Version     : 1.0  // Description : Example, UTF-8  //=====================================        /*eclipse cdt, gcc 4.8.1*/      #include <iostream>  #include <vector>  #include <cstring>        using namespace std;        //整型模板  template<unsigned N, unsigned M>  bool compare (const char (&p1)[N], const char (&p2)[M])  {      std::cout << "size : " << N << " " << M << std::endl;      return strcmp(p1, p2);  }        //指標  template<const char* C>  void pointerT(const char* str){      std::cout << C << " " << str << std::endl;  }        //引用  template<char (&ra)[9]>  void referenceT(const char* str){      std::cout << ra << " " << str << std::endl;  }        char ca[] = "Caroline"; //初始化指標  char cr[9] = "Caroline"; //初始化引用, 包含一個結尾符號        void f(const char* c) {std::cout << c << std::endl; }        //函數指標  template<void (*F)(const char*)>  void fpointerT(const char* c) {      F(c);  }        int main(void)  {      if(compare("Caroline", "Wendy")) {          std::cout << "Caroline is long." << std::endl;      } else {          std::cout << "Wendy is long." << std::endl;      }            //無法使用局部變數或者動態變數作為模板參數      pointerT<ca>("Wendy"); //指標            referenceT<cr>("Wendy"); //引用            fpointerT<f>("Caroline Wendy"); //函數指標            return 0;  }

輸出:

size : 9 6  Caroline is long.  Caroline Wendy  Caroline Wendy  Caroline Wendy

作者:csdn部落格 Spike_King

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.