سؤال

هل هناك مترجم هناك أن يعود اسم نوع بطريقة قابلة للقراءة (أو مكتبة توفير تلك الوظيفة أو أداة).أساسا ما أريده هو سلسلة المقابلة للتعبير نوع كنت أكتب في التعليمات البرمجية المصدر.

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

المحلول

 typeid(var).name()

هو ما كنت تبحث عنه.الإخراج يختلف من مترجم إلى مترجم على الرغم من...ل gcc الإخراج ل int هو i, ، إلى عن على unsigned هو j, ، على سبيل المثال.هنا هو برنامج اختبار صغير:

#include <iostream>
#include <typeinfo>

struct A { virtual ~A() { } };
struct B : A { };

class C { };
class D : public C { };

int main() {
  B b;
  A* ap = &b;
  A& ar = b;
  std::cout << "ap: " << typeid(*ap).name() << std::endl;
  std::cout << "ar: " << typeid(ar).name() << std::endl;

  D d;
  C* cp = &d;
  C& cr = d;
  std::cout << "cp: " << typeid(*cp).name() << std::endl;
  std::cout << "cr: " << typeid(cr).name() << std::endl;

  int e;
  unsigned f;
  char g;
  float h;
  double i;
  std::cout << "int:\t" << typeid(e).name() << std::endl;
  std::cout << "unsigned:\t" << typeid(f).name() << std::endl;
  std::cout << "char:\t" << typeid(g).name() << std::endl;
  std::cout << "float:\t" << typeid(h).name() << std::endl;
  std::cout << "double:\t" << typeid(i).name() << std::endl;
}

انظر أيضا هذا السؤال: اسم () البديل في ج 1 11?

نصائح أخرى

أثناء البحث عن هذا السؤال، لقد وجدت للتو ما أحتاج إليه في مكتبة Boost: دفعة :: Core :: Demange

في حالتي كانت للاستثناءات الاحتياطية:

giveacodicetagpre.

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

أيضا، وظيفة Getype هي ما تبحث عنه.بناء على ما هو نوع مطابقته، يمكنك تخصيص سلسلة الإخراج.قمت بحذف الجزء التضمين، لذلك من أجل ذلك، عليك فقط العثور على ملفات التضمين المناسبة لأن هذه المكتبة هي جزء من مكتبة أكبر.

/ * header.hpp * /

giveacodicetagpre.

/ * source.cpp * /

giveacodicetagpre.

للإجابة على خطاب سؤالك (حيث تعالج الإجابات الأخرى نيتها) ، فإن أبسط إجابة هي أن فيسوال ج provides يوفر الاسم" غير المزخرف " (غير المتشابك) كإخراج لـ std::type_info::name(), ، أثناء إخفاء النوع الفعلي المشوه خلف امتداد المترجم std::type_info::raw_name();كما يذكر كبريفيرانس عب وأوراكل كما توفير ديمانغلد ، أسماء قابلة للقراءة الإنسان ، ولكن ليس لدي أي خبرة مع المجمعين ، وبالتالي لا يمكن نفسي أقول ما إذا كان هذا الادعاء هو دقيق.

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