سؤال

هل من الممكن فعل شيء على غرار:

type t = int;//this would be a function which identifies what type the next argument is
if( t == int )
    printf( "%d", va_arg( theva_list, t ) );

بطريقة تافهة نسبيا؟ الكائن الوحيد الذي أعرفه والذي يمكن أن يحمل نوعًا هو type_info ولا يمكنني معرفة كيفية استخدامه بهذه الطريقة.

شكرا ، باتريك

هل كانت مفيدة؟

المحلول

بشكل عام ، لا. لا يمكن تخزين الأنواع إلا إلا مع التلاعب بها ، وما إلى ذلك ، في وقت الترجمة. إذا كنت تريد شيئًا ما في وقت التشغيل ، فيجب عليك تحويل (عادةً عبر metaprogramming المشعر) النوع إلى قيمة من نوع ما (على سبيل المثال ، التعداد).

ربما سيكون من الأفضل إذا أعطيت وصفًا أعلى إلى حد ما لما تحاول حقًا إنجازه هنا - يبدو مزيج من قوائم الوسيطة المتغيرة مع محاولة "التبديل على النوع" وكأنه حادث قطار على وشك الحدوث .. .

نصائح أخرى

ليس بالطريقة التي قد تفكر بها. يتم تقييم أنواع مثل "int" في نوع الترجمة. تريد تقييم نوع في وقت التشغيل.

ربما ترغب في جعل مرجع "T" وظيفة ، أو مثيل للفئة التي لها وظيفة افتراضية ، واحدة لكل نوع. في الأساس ، تريد نمط الأوامر ، حيث يكون الأمر "تنسيق قيمة" والمثيلات المختلفة للأمر تتوافق مع الأنواع المختلفة التي يمكن تنسيقها.

استخدم التخصص:

  void smart_print(int t)
  {
     printf("%d", i);
  }
  void smart_print(double f)
  {
     printf("%g", f);
  }

ولكن بمساعدة القوالب ، يمكنك أيضًا حل المؤشر إلى الوظيفة المتوقعة ، لذلك تعامل مع المؤشر كمعرف من النوع وستحصل على النتيجة المرجوة

يجب أن تنظر إلى كيفية << و >> يعمل المشغلون في فصول الدفق (Cout و CIN على سبيل المثال). ربما سيعطيك ذلك فكرة عن كيفية حل مشاكلك - أي الوظائف المحملة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top