سؤال

أنا أعمل على لعبة ولدي سؤال مثير للاهتمام.لدي بعض القيم الثابتة على مستوى اللعبة والتي أريد تنفيذها في ملف واحد.الآن لدي شيء مثل هذا:

ثوابت.cpp

extern const int BEGINNING_HEALTH = 10;
extern const int BEGINNING_MANA = 5;

الثوابت.hpp

extern const int BEGINNING_HEALTH;
extern const int BEGINNING_MANA;

ثم الملفات فقط #include "Constants.hpp" كان هذا يعمل بشكل رائع ، حتى كنت بحاجة إلى استخدام أحد الثوابت كمعلمة قالب ، لأن الثوابت المرتبطة بالخارج ليست معلمات قالب صالحة.لذا سؤالي هو: ما هي أفضل طريقة لتنفيذ هذه الثوابت؟أخشى أن مجرد وضع الثوابت في ملف رأس سيؤدي إلى تعريفها في كل وحدة ترجمة.وأنا لا أريد استخدام وحدات الماكرو.

شكرًا

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

المحلول

والتخلص من extern وكنت المحددة.

وهذا الرمز يعمل بشكل جيد تماما في الرأس، لأن كل شيء هو "ثابت حقا" ولديه الربط الداخلي بالتالي:

const int BEGINNING_HEALTH = 10;
const int BEGINNING_MANA = 5;
const char BEGINNING_NAME[] = "Fred";
const char *const BEGINNING_NAME2 = "Barney";

لا يمكن أن يكون بأمان وضع هذا الرمز في ملف رأس لكل سطر يحتوي الربط الخارجي (إما صراحة أو بسبب عدم ثبات حقا):

extern const int BEGINNING_HEALTH = 10;
extern const int BEGINNING_MANA = 5;
const char *BEGINNING_NAME = "Wilma";  // the characters are const, but the pointer isn't

نصائح أخرى

وماذا عن تتضمن التعدادات؟

وconstants.hpp

  enum {
    BEGINNING_HEALTH = 10,
    BEGINNING_MANA = 5
  }

استخدم "الباحث CONST ثابت" في ملف .hpp الخاص بك، ووضع شيء في الملف .cpp (باستثناء أيا كان رمز آخر لديك هناك بطبيعة الحال).

والاستفادة من النطاقات:

namespace GameBeginning {
    const int HEALTH = 10;
    const int MANA   = 5; 
};

وثم ش كما يمكن استخدام player.health = GameBeginning :: HEALTH؛

ومعظم المجمعين ببساطة لا تخصيص مساحة للقيم POD CONST. انهم تحسين بها والتعامل معهم كما لو كانوا #defined، أليس كذلك؟

ماذا حدث لشيء بسيط:

#define BEGINNING_HEALTH 10

يا رجل، كانت تلك الأيام.
أوه انتظر هؤلاء لا تزال الأيام!

وربما شيئا على غرار من فئة ثابتة؟

class CONSTANTS {
public:
static inline int getMana() { return 10;};
};

وعلى إجابة سريعة على سؤال العنوان، نمط المفرد هو ممكن أفضل وسيلة، C ++ إلى تعريف الثوابت عبر الملف وضمان مثيل واحد فقط من وجوه.

وبقدر ما يتعلق الأمر مشكلة معلمة قالب، تحتاج إلى تمرير نوع يست قيمة. نوع هو "كثافة".

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