我有一个游戏服务器,它使用数据库来读取/写入有关帐户和内容的信息。事实是,服务器有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
}
这是不好的做法吗?
答案 0 :(得分:0)
是的,这通常被认为是不好的做法。大多数程序员都不赞成全局变量。
您应该将自由函数作为类Server
和Database
的方法移动,而不是使用全局函数。您的服务器应该有一个数据库(组合)。在代码的某处,您应该实例化并管理单个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()
{
}