我正在使用名稱空間在不同版本的數據庫實現之間切換。我的客戶端代碼不需要知道詳細信息,因此我使用名稱空間別名來隱藏客戶端代碼中的特定版本。將項目添加到別名名稱空間
db_v1.h
namespace db_v1
{
class Database ...
}
db_def.h
#ifdef _DB_V1
#include "db_v1.h"
#endif
namespace db = db_v1;
現在,如果我想延長額外的項目,這是不特定版本的命名空間,我想將它們添加到命名空間db
,但問題是我不能使用namespace db
,因爲它是一個別名。
db_global.h
namespace db <-- should be using the namespace for the current version
{
typedef enum
{
OK
} value;
}
很顯然,我在這裏得到一個錯誤,因爲命名空間db
已經存在,而我真正想要的是,在不知道至極版本擴展了命名空間是當前一個。
據我所見,我必須將這樣一個定義放入一個單獨的命名空間,如db_global
,否則我將不得不在所有版本中複製這些符號,而我並不喜歡這些符號。
是否有某種方式來定義它,這樣我可以在客戶端代碼是這樣寫的:
x = db::value::OK;
我不認爲這是一個好方法...命名空間來避免名稱衝突,但你可能需要的是使用繼承和多態性,保持相同的名稱空間......有一個基類可以設置所有基本功能並讓派生類定義準確的行爲,這有什麼問題? – Jauch