[英]Where to put global domain specific constants (and how)?
我有一個C ++代碼,它是一個物理模擬工具。
我想存儲一些物理常數,不同組單位之間的轉換因子,以及更多特定於應用程序的常數(例如像enum Planes {X=0, Y=1}
這樣的定義),並且我希望能夠訪問在我的代碼中到處都有它們。
最好的方法是什么?
我認為一種方法是使用嵌套名稱空間(例如“ constants”,“ units”等)創建名稱namespace constants
名稱namespace constants
(然后可以是我的主要名稱空間中的嵌套名稱空間)。
你會那樣做嗎?
如果使用該方法,是否必須使其成為頭文件並將其包含在所有地方?
如果我正確理解,則全局范圍名稱空間中的變量具有static
鏈接,但沒有external
鏈接。 然后,如果我想在不包含文件的情況下使用它們,還必須將它們聲明為extern
?
如您所見,我對此感到有些困惑。
如果編譯器沒有說出任何無法識別的信息,那么您是安全的。 重要的是編譯器知道在哪里可以找到該變量。 一旦包含頭文件,從技術上講,它就是該文件中代碼的復制和粘貼。 鑒於此,您需要執行一些預編譯器指令。
#ifndef _MYGLOBALS
#define _MYGLOBALS
int global_integer;
long global_long;
#endif
這樣可以確保僅將它們包含一次,並且在代碼中不會有太多的變量引用。
在大多數情況下,命名空間常量是一種解決方法。
如果使用該方法,是否必須使其成為頭文件並將其包含在所有地方?
是的,或者不是在所有地方都可以使用,而只能在真正使用的地方使用。
如果我正確理解,則全局范圍名稱空間中的變量具有靜態鏈接,但沒有外部鏈接。 然后,如果我想在不包含文件的情況下使用它們,還必須將它們聲明為extern?
是的,您必須這樣做:
// header
namespace modulename
{
// maybe add another namespace to specify that you have constants, but taste-dependant
namespace domain // like maths or physics
{
extern const Number THIS_NUMBER; // have to be defined in the cpp
extern const int THAT_NUMBER = 256; // if it's int-based type, you can define it -here - BUT DON'T IF IT CAN BE CHANGED : all files including this one would have to be recompiled at each value change!!
}
}
// .cpp, where you have the definitions
namespace modulename
{
namespace domain // like maths or physics
{
const Number THIS_NUMBER = Number( 256.42f ); // definition - static is implicit
}
}
我將創建一個常量名稱空間,並在其中放入所有與全局相關的常量。 任何僅與單個類相關的常量,在類本身內聲明為靜態const。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.