Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ - Fatal编程技术网

C++ 读取其他进程内存的更好设计模式?

C++ 读取其他进程内存的更好设计模式?,c++,C++,我正在为一个离线游戏编写一个欺骗,有一个名为Player的类,负责在另一个进程中获取和设置值。然而,我对这个类的设计非常糟糕,因为类播放器的使用看起来非常混乱和丑陋,很难阅读和维护 // declare variables here to read if (Player.getthis() && Player.getthat() && Player.getthat() ... and so on) //do stuff class Player { ... p

我正在为一个离线游戏编写一个欺骗,有一个名为Player的类,负责在另一个进程中获取和设置值。然而,我对这个类的设计非常糟糕,因为类播放器的使用看起来非常混乱和丑陋,很难阅读和维护

// 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来传播错误几乎总是表示需要异常。。。对不起,我错过了。