C++ 读取其他进程内存的更好设计模式?
我正在为一个离线游戏编写一个欺骗,有一个名为Player的类,负责在另一个进程中获取和设置值。然而,我对这个类的设计非常糟糕,因为类播放器的使用看起来非常混乱和丑陋,很难阅读和维护C++ 读取其他进程内存的更好设计模式?,c++,C++,我正在为一个离线游戏编写一个欺骗,有一个名为Player的类,负责在另一个进程中获取和设置值。然而,我对这个类的设计非常糟糕,因为类播放器的使用看起来非常混乱和丑陋,很难阅读和维护 // declare variables here to read if (Player.getthis() && Player.getthat() && Player.getthat() ... and so on) //do stuff class Player { ... p
// declare variables here to read
if (Player.getthis() && Player.getthat() && Player.getthat() ... and so on)
//do stuff
class Player {
...
public:
...
// either of these calls can fail, so I return TRUE on success and FALSE on failure
BOOL GetHealth(float& health);
BOOL SetHealth(float& health);
...
};
所以我的问题是,什么是更好的方法?
另外:我不一定需要读取内存中播放器的每一个值,一次只读取几个值。这就是为什么我没有一个单一的方法,比如BOOL UpdatePlayer,它可以读取所有内容并更新播放器
class Player {
public:
class AccessException : public std::exception {
friend class Player;
public:
virtual const char *what() const noexcept {
return "Error getting property with key " + key;
}
private:
AccessException(const std::string &key)
: key(key)
{}
std::string key;
};
float GetHealth() {
if (is_error) {
throw AccessException("health");
}
return health;
}
float GetPosX() {
if (is_error) {
throw AccessException("posX");
}
return posX;
}
};
void do_stuff() {
try {
float health = player.GetHealth();
float posX = player.GetPosX();
// Use health and posX...
} catch (const AccessException &ex) {
std::cerr << ex.what() << std::endl;
}
}
你为什么用BOOL而不是BOOL关键字?与TRUE/FALSE vs TRUE/FALSE相同,我假设欺骗是针对winapi应用程序的。看起来您的代码目前运行正常,您正在寻求改进。一般来说,这些问题对本网站来说过于固执己见,但你可能会在网站上找到更好的运气。记住要阅读,因为它们比这个网站要严格一点。有那么多的代码,你不可能知道你想要修复什么以及如何修复它。@FrankerZ这个问题在当前的形式下将作为代码审查的主题关闭。没有考虑。为什么要添加例外?@KarolyHorvath,因为这正是它们创建的目的。为了什么?我是说。。。OP的问题中没有任何东西表明他需要它们。@KarolyHorvath,嗯,是的,非常需要。返回bool来传播错误几乎总是表示需要异常。。。对不起,我错过了。