Chương trình minh hoạ :
PHP Code:template< int N >
class Pow3
{
public:
enum { result = 3 * Pow3<N-1>::result };
};
template< >
class Pow3< 0 >
{
public:
enum { result = 1 };
};
#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 :
Sưu tầm từ diendantinhoc.net
- 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 đó .
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667 (Office: 04 6329 2380)
Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)