سؤال

هل هناك طريقة بسيطة للتحقق من نوع الكائن؟ أحتاج إلى شيء على الأسطر التالية:

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

في الوقت الحالي، أستخدم كتل تجربة متداخلة تبحث عن System::InvalidCastExceptionيشبه القبيح ولكن يعمل. كنت سأحاول وملف تعريف شيء مثل التعليمات البرمجية أعلاه لمعرفة ما إذا كان الأمر أسرع / أبطأ / قابل للقراءة ولكن لا يمكن أن تعمل على بناء الجملة حتى حاول.

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

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

المحلول

يمكنك استخدام MyObject::typeid في C ++ / CLI بنفس الطريقة typeof(MyObject) يستخدم في C #. رمز أدناه مخالف من سؤالك وتعديل ...

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

نصائح أخرى

يجب عليك التحقق من كيفية: تنفيذ وكالة C # الرئيسية في C ++:

يوضح هذا الموضوع كيفية تطبيق وظائف الكلمات الأساسية وكأنها C # الرئيسية في Visual C ++.

تعديل: سأترك هذا هنا. ولكن هذه الإجابة هي ل C ++. ربما لا ترتبط قليلا بالقيام بذلك من أجل CLI.

تحتاج إلى تجميع مع RTTI (معلومات نوع التشغيل) على. ثم انظر إلى مقالة ويكيبيديا http://en.wikipedia.org/wiki/run-time_type_information. والبحث في جوجل ل RTTI. يجب أن تعمل من أجلك.

من ناحية أخرى، قد ترغب في الحصول على فئة أساسية افتراضية لجميع فئات البيانات الخاصة بك مع متغير عضو يصف نوعه.

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