变量内部命名空间

时间:2014-04-13 16:15:02

标签: c++ namespaces

我有一个游戏服务器,它使用数据库来读取/写入有关帐户和内容的信息。事实是,服务器有1个数据库连接,我从服务器的开始初始化。喜欢这个

// .hpp
namespace database
{
    void Init();    // call this when the server starts

    bool ReadUser(std::string &id, std::string &pass, int salt);
    // rest of functions
}


// .cpp
namespace database
{
    Database n_db;

    Init()
    {
        if (n_db != init)
        {
            // init here
        }
    }

    // use n_db for the rest
}

这是不好的做法吗?

3 个答案:

答案 0 :(得分:0)

是的,这通常被认为是不好的做法。大多数程序员都不赞成全局变量。

您应该将自由函数作为类ServerDatabase的方法移动,而不是使用全局函数。您的服务器应该有一个数据库(组合)。在代码的某处,您应该实例化并管理单个Server对象的所有权。

这样做的好处是,如果您需要多个服务器和多个数据库,可以更容易地重复使用。

如果你真的想拥有一个服务器实例,你可能想要使用Singleton pattern,它本质上是一个带有花哨帽子的全局变量。

答案 1 :(得分:0)

您应该将该变量添加到类中。如果不是,它将被视为命名空间的全局变量。

答案 2 :(得分:0)

这是一种不好的做法。当涉及到命名空间可以包含的内容时,C ++不是一种非常严格的语言。另一方面,C ++根本不是一种严格的语言。但是,要使代码健壮且可读。建议您仅在命名空间中存储类型。这些可以包含类,结构,枚举,甚至是常量表达式。但是不要在命名空间内声明函数。这就是我重写代码的方式:

// .hpp
namespace database
{
    class DatabaseClass
    {

        void Init();    // call this when the server starts

        bool ReadUser(std::string &id, std::string &pass, int salt);
        // rest of functions
    }
}

// .cpp
using namespace database;
DatabaseClass::Init()
{
}