ايران ويج

نسخه‌ی کامل: دو سوال
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام به دوستان عزیز
1-
کد:
::MessageBox(NULL, strcat(str, code), "int exception", MB_OK);
این یه قسمت از کد npp هست اون دونقطه اولش چیه؟

2- بعضی توابع مثل printf تعداد n+1 تا پارامتر داره که از یه سری تابع مثلا
va_read استفاده میشه که حتما باید نوع داده مشخص باشه
میشه برای template ها اینو پیاده کرد؟
چون تو template ها نوع داده مشخص نیست
1- همونطور که میدونی MessageBox یک تابع API هست و بصورت Global نسبت به برنامه ما تعریف میشه . حالا اگر بخواییم یه همچین تابعی رو توی کلاس یا Namespace صدا بزنیم ، باید برای کامپایلر مشخص کنیم که این تابع Global هست و خارج از کلاس یا Namespace ما تعریف شده .
در نتیجه ازScope Resolution Operator یا همون عملگر :: پشت نام تابع استفاده میکنیم و به کامپایلر اعلام میکنیم که این تابع خارج از کلاس ما تعریف شده !

2- این قضیه هیچ مشابهتی با Template ها نداره . Template ها توابعی هستند که میتونن پارامترهایی محدود از انواع تعریف شده توسط ما دریافت کنند نه اینکه بینهایت پارامتر مختلف و نامشخص دریافت کنند .
پس تو تعریف Template ها هست که محدود باشن درسته؟
مثلا تعریف پایین کاملا درسته . حالا دریافت و کنترل آرگومان های سوم به بعدش دیگه با خودته . کاملا واضحه که دو پارامتر اول در زمان تعریف تابع مشخص میشن ( پس باید محدود باشند ) ولی خوب نوع بقیه پارامتر ها رو نمیتونی مشخص کنی چون نامحدود هستند ( این به این معنی هست که بقیه پارامتر ها میتونن از مدل T باشند یا نباشند و این متاسفانه قابل تشخیص دادن نیست !!)


کد:
template <class T>
T GetMax (T a, T b,...) {
  T result;
  result = (a>b)? a : b;
  return (result);
}