מבנה המצגת ? מה זה - Metaprogramming Ø C++ templates metaprogramming Ø C++ דוגמא בשפת Ø 2
? מה זה - Metaprogramming " "תוכנית הכותבת תוכנית Meta Program Object Program 3
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; i<N; ++i) { if (data[i] != 'a') valid = 0; } return valid; } 8
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. 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. Func(char *data) { return (data[0] != 'a') ? 0 : 1; } }; 12
? איך זה עובד 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