使名称空间成为类的朋友?

问题描述

我正在尝试封装Allegro5 C ++库,并且我想要一个呈现函数的名称空间。问题是,为了使用渲染功能,我需要访问Sprite中的私有ALLEGRO_BITMAP变量。从理论上讲,我可以使所有功能成为精灵的朋友,但是这样的安排会非常糟糕。另一种选择是拥有一个具有渲染功能的类,并使该类成为精灵的朋友。有没有我想到的更简单的方法?

#include <allegro.h>
#include "Sprite.h"

namespace Rendering
{
    

    //void RenderSprite(Sprite sprite)
    //{
    //  al_draw_bitmap(sprite.mpBitmap);
    //}
}
#pragma once

#include <allegro.h>


class Sprite
{
    
public:

    Sprite();
    Sprite(char* filepath);
    ~Sprite();

    Sprite clone();
    int getHeight();
    int getWidth();
    void loadBitmap(char* filePath);
private:

    ALLEGRO_BITMAP* mpBitmap;

    Sprite(const Sprite& sprite) = delete;

};

更新:

所以我看到了一些评论,询问为什么sprite中的member变量需要私有。目的是帮助维护封装的概念,并向库的最终用户隐藏Allegro代码。最终目标是使最终用户永远不需要使用allegro代码,因为该库将隐藏其实现细节。

至于为什么我不能为此而吸气。用我教授从封装中拿走的话来说,这给我留下了“漏网的抽象”。


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...