Metaprogramming C templates metaprogramming C 2 Metaprogramming Meta

  • Slides: 14
Download presentation

 מבנה המצגת ? מה זה - Metaprogramming Ø C++ templates metaprogramming Ø C++

מבנה המצגת ? מה זה - Metaprogramming Ø C++ templates metaprogramming Ø C++ דוגמא בשפת Ø 2

? מה זה - Metaprogramming " "תוכנית הכותבת תוכנית Meta Program Object Program 3

? מה זה - Metaprogramming " "תוכנית הכותבת תוכנית Meta Program Object Program 3

C++ Template metaprogramming : C++ templates יעוד מקורי של Ø Parametric polymorphism Turing ,

C++ Template metaprogramming : C++ templates יעוד מקורי של Ø Parametric polymorphism Turing , 2000. Unruh , 1994 : היסטוריה Ø complete : המאפשרים זאת templates תכונות של Ø § חישובים בזמן קומפילציה specialization § 6

 קוד דינאמי int is. Valid(char *data, int N) { for (int valid=1, i=0;

קוד דינאמי int is. Valid(char *data, int N) { for (int valid=1, i=0; i<N; ++i) { if (data[i] != 'a') valid = 0; } return valid; } 8

 הרצת הקוד הדינאמי cout << is. Valid("aaa", 3) << endl; cout << is.

הרצת הקוד הדינאמי cout << is. Valid("aaa", 3) << endl; cout << is. Valid("aab", 3) << endl; Output: 1 0 9

N=3 דוגמא לקוד הדינאמי עבור int is. Valid. No. Loop(char *data, int N=3) {

N=3 דוגמא לקוד הדינאמי עבור int is. Valid. No. Loop(char *data, int N=3) { int valid=1, i=0; if (data[i++] != 'a') valid = 0; return valid; } 10

 קוד סטטי template<int N> class is. Valid. Class { public: static int is.

קוד סטטי template<int N> class is. Valid. Class { public: static int is. Valid. Func(char *data) { return (data[0] != 'a') ? 0 : is. Valid. Class<N-1> : : is. Valid. Func(++data); } }; 11

Specialization for N=1 template<> class is. Valid. Class<1> { public: static int is. Valid.

Specialization for N=1 template<> class is. Valid. Class<1> { public: static int is. Valid. Func(char *data) { return (data[0] != 'a') ? 0 : 1; } }; 12

? איך זה עובד is. Valid. Class<3>: : is. Valid. Func("aaa"); is. Valid. Class<2>:

? איך זה עובד is. Valid. Class<3>: : is. Valid. Func("aaa"); is. Valid. Class<2>: : is. Valid. Func("aa"); is. Valid. Class<1>: : is. Valid. Func("a"); ('a' != 'a') ? 0 : 1; 13