如何解决使名称空间成为类的朋友?
我正在尝试封装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 举报,一经查实,本站将立刻删除。