Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向别名命名空间添加项_C++_Namespaces - Fatal编程技术网

C++ 向别名命名空间添加项

C++ 向别名命名空间添加项,c++,namespaces,C++,Namespaces,我使用名称空间在数据库实现的不同版本之间切换。我的客户机代码不需要知道详细信息,因此我使用名称空间别名对客户机代码隐藏特定版本 db_v1.h db_def.h 现在,如果我想用非版本特定的附加项扩展名称空间,我想将它们添加到名称空间db,但问题是我不能使用名称空间db,因为它是一个别名 db_global.h 也许吧 在db_def.h中,而不是namespace db=db_v1?这样,db_v1的所有内容都导入到db命名空间中。显然,它可以有条件地编译: namespace db { #i

我使用名称空间在数据库实现的不同版本之间切换。我的客户机代码不需要知道详细信息,因此我使用名称空间别名对客户机代码隐藏特定版本

db_v1.h db_def.h 现在,如果我想用非版本特定的附加项扩展名称空间,我想将它们添加到名称空间
db
,但问题是我不能使用
名称空间db
,因为它是一个别名

db_global.h 也许吧

db_def.h
中,而不是
namespace db=db_v1?这样,
db_v1
的所有内容都导入到
db
命名空间中。显然,它可以有条件地编译:

namespace db {
#ifdef _DB_V1
    using namespace db_v1;
#elif defined _DB_V2
    using namespace db_v2;
#endif
}
例如,此代码运行良好:

namespace db_v1 {
    void foo(){}
}

namespace db_v2 {
    void foo(){}
}

namespace db {
    using namespace db_v1;
}

namespace db {
    typedef enum
    {
         OK
    } value;
}

我认为这不是一个好方法。。。名称空间用于避免名称冲突,但您可能需要处理继承和多态性,保持相同的名称空间。。。让基类设置所有基本功能并让派生类定义准确的行为有什么问题!太简单了!是的,我正在考虑如何使用
使用
,但我的想法是错误的,因为我对别名的设定太高了。:)谢谢
namespace db   <-- should be using the namespace for the current version
{
    typedef enum
    {
         OK
    } value;
}
 x = db::value::OK;
#ifdef _DB_V1
    #include "db_v1.h"
#endif

namespace db {
    using namespace db_v1;
}
namespace db {
#ifdef _DB_V1
    using namespace db_v1;
#elif defined _DB_V2
    using namespace db_v2;
#endif
}
namespace db_v1 {
    void foo(){}
}

namespace db_v2 {
    void foo(){}
}

namespace db {
    using namespace db_v1;
}

namespace db {
    typedef enum
    {
         OK
    } value;
}