منذ ان تعلمت الـ template و انا لازلت اكتشف الكثير مما يمكننى ان أفعل بها، ايضا النتائج التى احصل عليها من الأفكار التى اطبقها تجعلنى اخمن كيف يعمل المترجم احيانا.
الهدف من هذا المثال هو الحصول على بعض البيانات المتعلقه بنوع معين. فعلى افتراض انك لن تستخدم Runtime Type Identification، إليك الفئه التاليه:
template<class t>
struct static_info
{
static const bool is_integer;
static const bool is_signed;
static const bool is_pointer;
};الكود التالي هو testcase لنسختك:
#include <iostream>
using namespace std;
#define GEN(T) { \
typedef static_info<T> info; \
cout << #T << " info:\n" << boolalpha \
<< "integer: " << info::is_integer \
<< ", signed: " << info::is_signed \
<< ", pointer: " << info::is_pointer << "\n\n"; }
int main()
{
GEN(float) // false, true, flase
GEN(float*) // false, true, true
GEN(short) // true, true, false
GEN(short*) // true, true, true
GEN(unsigned) // true, false, false
GEN(unsigned*) // true, false, true
}الكود السابق المفترض ان ينتج التالي:
float info: integer: false, signed: true, pointer: false float* info: integer: false, signed: true, pointer: true short info: integer: true, signed: true, pointer: false short* info: integer: true, signed: true, pointer: true unsigned info: integer: true, signed: false, pointer: false unsigned* info: integer: true, signed: false, pointer: true
سأضع اجابتي لاحقا.
و الله ولي التوفيق