قواعد الإدراج في رأس الملفات عند استخدام نوع في typedef

StackOverflow https://stackoverflow.com/questions/631808

  •  08-07-2019
  •  | 
  •  

سؤال

إن إنشاء

typedef double (MyClass::*MemFuncGetter)();

في ملف رأس, هل أنا بحاجة إلى إدراج "MyClass.ح" أو إلى الأمام معلنا يكفي ؟

عنوان الملف:

#ifndef _TEST_
#define _TEST_


#include "MyClass.h" //do I need this?
//or I can just say class MyClass;

typedef double (MyClass::*MemFuncGetter)();


#endif

ما هي قواعد الربط هنا ؟

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

المحلول

كنت على ما يرام مع فقط إلى الأمام إعلان الدرجة:

#ifndef _TEST_
#define _TEST_

class MyClass;
typedef double (MyClass::*MemFuncGetter)();

#endif

ولكن لاحظ أن كل فئة المترجم له للقيام بعمل إضافي للتعامل مع الحالات عندما MyClass متعددة الظاهري الميراث الفوضى ، لأنه لا يعرف.في بعض الحالات وهذا يمكن أن يعني أن كل وظيفة المؤشر في الواقع يستغرق ما يصل إلى 20 بايت من الذاكرة.في حين إذا كنت قد حددت كله ، كل وظيفة المؤشر إلا 4.(طبعا جميع الأحجام مترجم-معال).

نصائح أخرى

تحتاج إلى أن يكون على الأقل إعلان MyClass في نطاق -- إلى الأمام إعلان على الأقل.الرموز المميزة ل Typedef إنشاء اسم مستعار.ولكنها لا تخلق نوع جديد أو تغيير الربط.الربط سيتم من MemFuncGetter.

نعم إلى الأمام declraing بما فيه الكفاية.

إنشاء ملف MyClassFwd.ح و وضع هناك

class MyClass;
typedef double (MyClass::*MemFuncGetter)();

وتشمل قدما decl - أن يكون كافيا.لا نسخ ولصق الرموز المميزة ل typedef.في 'MyClass.ح' ببساطة تشمل 'MyClassFwd.ح'

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