Chương trình minh hoạ :

PHP Code:
templateint N >
    class 
Pow3
    
{
    public:
       
enum result Pow3<N-1>::result };
    };
   
    
template< >
    class 
Pow3>
    {
    public:
       
enum result };
    };
   
    
#include < iostream >
    
using namespace std;
   
    
#define FIVE 5
   
    
int main()
    {
       
cout << "Pow3<4>::result = " <<  Pow3<4>::result << endl;
       
cout << "Pow3<FIVE>::result = " <<  Pow3<FIVE>::result << endl;
       return 
0;   
    } 


Output là :

Code:
Pow3<4>::result = 81
Pow3<FIVE>::result = 243


Chú thích :
  • 1. Một số "language" như MASM, TASM ... viết một macro để tính 3^n với n = const expression (dĩ nhiên là integer) , tại compiler time không khó vì macro của các ngôn ngữ đó cho phép dùng : loop, function .... ( lưu ý loop và function của macro, chứ không phải loop và function của language ) .

    Do hạn chế của preprocess của C, chúng ta không có cách nào viết một "function" tính 3^n tại compiler time . Với sự giúp đỡ của template trong C++, chúng ta có thể "gần đạt" tới điều mong muốn .

    Code ở trên, lấy từ chương 17 của C++ Templates: The Complete Guide (ISBN 0201734842)

    http://vig.pearsoned.com/samplechapt...34842.pdf

  • 2. Bạn có thể nghĩ dùng #define như sau để giải quyết vấn đề

    PHP Code:
    #define POWER3_0  1
        #define POWER3_1  (3*POWER3_0)
        #define POWER3_2  (3*POWER3_1)
        
    ...... 


    Tuy nhiên nếu user muốn 3^200, 3^1000, 3^FIVE ... (giả sử trước đó chúng ta đã define : #define FIVE 5 , và cũng không quan tâm tới việc tràn số ...) thì sao .

  • 3. Như tài liệu ở trên đề cập, 1994 trong một buổi họp của Ủy ban chuẩn hóa C++, Erwin Unrul đã khám phá ra template có thể được dùng để tính toán "something" tại compiler time và Erwin đã viết một program để minh hoạ điều đó .
Sưu tầm từ diendantinhoc.net