1. 程式人生 > >C++之模板超程式設計

C++之模板超程式設計

關於模板原程式設計知識強烈推薦:http://blog.jobbole.com/83461/,非常好!


這篇文章通過舉例詳細介紹了模板的模板引數,模板特例化,模板例項化以及編譯連結等模板基礎知識。

本文主要分析文章中的模板超程式設計例子:

首先複述一下模板超程式設計,以下標紅或者加粗的地方是模板超程式設計的精髓:

從程式設計範型(programming paradigm)上來說,C++ 模板是函數語言程式設計(functional programming),它的主要特點是:函式呼叫不產生任何副作用(沒有可變的儲存),用遞迴形式實現迴圈結構的功能。C++ 模板的特例化提供了條件判斷能力

,而模板遞迴巢狀提供了迴圈的能力,這兩點使得其具有和普通語言一樣通用的能力(圖靈完備性)。

程式設計形式來看,模板的“<>”中的模板引數相當於函式呼叫的輸入引數模板中的 typedef 或 static const 或 enum 定義函式返回值(型別或數值,數值僅支援整型,如果需要可以通過編碼計算浮點數),程式碼計算是通過型別計算進而選擇型別的函式實現的(C++ 屬於靜態型別語言,編譯器對型別的操控能力很強)

模板下的控制結構:

template < bool c , typename Then ,
typename Else > class IF_ { } ; template < typename Then , typename Else > class IF_ < true , Then , Else > { public : typedef Then reType ;
} ; template < typename Then , typename Else > class IF_ < false , Then , Else > { public : typedef Else reType ; } ;   // 隱含要求: Condition 返回值 ret,Statement 有型別 Next template < template < typename > class Condition , typename Statement > class WHILE_ {      template < typename Statement > class STOP { public : typedef Statement reType ; } ; public :      typedef typename          IF_ < Condition < Statement > :: ret ,          WHILE_ < Condition , typename Statement :: Next > ,          STOP < Statement >> :: reType :: reType      reType ; } ;
template < int n , int e > class sum_pow {      template < int i , int e > class pow_e { public : enum { ret = i * pow_e < i ,

相關推薦

C++模板程式設計

關於模板原程式設計知識強烈推薦:http://blog.jobbole.com/83461/,非常好! 這篇文章通過舉例詳細介紹了模板的模板引數,模板特例化,模板例項化以及編譯連結等模板基礎知識。 本文主要分析文章中的模板超程式設計例子: 首先複述一下模板超程式設計,以下標紅或者

現代c++與模板程式設計

最近在重溫《c++程式設計新思維》這本經典著作,感慨頗多。由於成書較早,書中很多超程式設計的例子使用c++98實現的。而如今c++20即將帶著concept,Ranges等新特性一同到來,不得不說光陰荏苒。在c++11之後,得益於新標準很多超程式設計的複雜技巧能被簡化了,STL也提供了諸如<type_t

c++模板程式設計:std::invoke原始碼分析及其實現

在實現invoke之前,我們先看一下標準庫種invoke的使用方式 template< class F, class... Args>std::invoke_result_t<F, Args...> invoke(F&& f, Args&&... ar

c++模板程式設計七:型別判斷的traits類

is_void類可以判斷模板引數的型別,使用很簡單,注意,也可以直接使用::value。cout << std::is_void<void>::type::value << endl; cout << std::is_void<bool>::type

C++模板程式設計

        所謂的超程式設計就是編寫直接生成或操縱程式的程式,C++模板為C++語言提供了超程式設計的能力。模板使 C++ 程式設計變得異常靈活,能實現很多高階動態語言才有的特性(語法上可能比較醜陋,一些歷史原因見下文)。普通使用者對 C++ 模板的使用可能不是很頻繁,大

C++模板程式設計----選擇排序

[//]:#(C++模板超程式設計----選擇排序) # 目錄 - [目錄](#目錄) - [前言](#前言) - [程式碼詳解](#程式碼詳解) - [資料的結構](#資料的結構) - [資料的操作](#資料的操作) - [分割向量](#分割向量) - [合併向量](#合併向量)

C++模板程式設計----快速排序

## 目錄 - [目錄](#目錄) - [簡介](#簡介) - [實現](#實現) - [資料結構定義](#資料結構定義) - [在陣列前新增一個元素](#在陣列前新增一個元素) - [判斷](#判斷) - [分堆](#分堆) - [合併](#合併) - [快速排序的實現](#快

C++模板程式設計----堆排序

## 目錄 - [目錄](#目錄) - [前言](#前言) - [實現的一些小細節](#實現的一些小細節) - [Debug](#debug) - [惰性求值](#惰性求值) - [總結](#總結) - [Ref](#ref) ## 前言 經過前兩次經驗的積累,終於來到了麻煩的堆排序。在一開始

現代c++模板程式設計:遍歷tuple

tuple是c++11新增的資料結構,通過tuple我們可以方便地把各種不同型別的資料組合在一起。有了這樣的資料結構我們就可以輕鬆模擬多值返回等技巧了。 tuple和其他的容器不同,標準庫沒有提供適用於tuple的迭代器,也沒有提供tuple型別的迭代介面。所以當我們想要遍歷tuple的時候只能自己動手了。

C++ 模板Template的使用

attribute att 可能 類模板 title 尖括號 exp gin container 轉自https://www.cnblogs.com/cynchanpin/p/7127897.html 1、在c++Template中非常多地方都用到了typename與cl

基於Visual C++Windows核心程式設計程式碼分析(1)實現裝置管理器列舉裝置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++模板

模板的引入 在討論模板之前,先看一下這個經典的交換程式: #include <iostream> using namespace std; void swap1(int& a, int& b) { int temp = a; a

模板程式設計(2):計算最值

   本文就Loki編譯期技術中的型別列表Typelist作了一些擴充套件,增加了以下幾個方法:      • 獲取最大和最小長度,即求取Typelist中長度最大和最小的值        • 獲取最大和最小型別,即求取Typelist中長度最大和最小的型別實現    位於Loki::TL名稱空

模板程式設計(3):型別選擇

{54    BOOST_MPL_ASSERT((boost::is_same<typename if_then_else<true,T1,T2>::type,T1>));55    BOOST_MPL_ASSERT((boost::is_same<typename if_the

模板程式設計(1):選擇API

C與C++ API的比較    在c語言中,API體現為c函式,如作業系統提供的一系列API,在c++中,API體現為自由函式,這裡的自由函式是指除普通成員函式、靜態成員函式、友元函式外的能在某名稱空間作用域或全域性空間內直接訪問的函式,而這更多地體現為函式模板,如stl提供的一系列演算法swa

C++模板詳解(一)

C++模板   模板是C++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。   模板是一種對型別進行引數化的工具;   通常有兩種形式:函式模板和類模板;   函式模板針對僅引數型別不同的函式;   類模板針對僅資料成

基於visual c++windows核心程式設計程式碼分析(21)獲取和設定環境變數

環境變數是一個具有特定名字的物件,它包含了一個或者多個應用程式所將使用到的資訊。例如path,當要求系統執行一個程式而沒有告訴它程式所在的完整路徑時,系統除了在當前目錄下面尋找此程式外,還應到path中指定的路徑去找。使用者通過設定環境變數,來更好的執行程序。 環境變數一

Item 48:瞭解模板程式設計

Item 48: Be aware of template metaprogramming. 模板超程式設計(Template Metaprogramming,TMP)就是利用模板來編寫那些在編譯時執行的C++程式。 模板元程式(Template Metap

C++11模版程式設計

1.概述   模版超程式設計(template metaprogram)是C++中最複雜也是威力最強大的程式設計正規化,它是一種可以建立和操縱程式的程式。模版超程式設計完全不同於普通的執行期程式,它很獨特,因為模版元程式的執行完全是在編譯期,並且模版元程式操縱的資料不能是執行時變數,只能是編譯期常量,不可修

C++自動化(模板元)程式設計基礎與應用

/******************************************************************************* ========scatter_helper======== int: 0 char : 1 char : 2 int: 3 10 B