c++ - 将类型隐藏在类中并在内部使用

标签 c++ sfml

我正在创建一个共享库 (.so),我想隐藏我正在使用但没有成功的内部类型。我正在使用 SFML 进行绘图,但我想提供我自己的界面而不是 SFML 界面。

如果我这样做:

class Texture: public sf::Texture {
};

然后我可以使用来自 sf::Texture 的界面。但我想要 sf::Texture 具有的函数的不同返回类型(例如:getSize() 等..) 所以这不是解决方案:(。

如果我这样做:

class Texture {
public:
    vec2 get_size() const{ return vec2(m_t.getSize()); }
private:
    sf::Texture m_t;
};

这看起来好多了,但我还有另一个问题.. 要将 sf::Texture 与 sf::Sprite 一起使用,我需要访问该内部类型 (sf::Texture) 然后我需要添加这样的方法:

sf::Texture& get_internal_texture() {return m_t;}

这很糟糕,因为我不希望库的用户可以访问该内部变量...

你将如何处理这种情况?

最佳答案

friend 是你的 friend 。

class Texture {
friend class ClassThatWantsToUseTextureVariable;
public:
    vec2 get_size() const{ return vec2(m_t.getSize()); }
private:
    sf::Texture m_t;
};

或者更好的是将将使用变量的方法声明为友元

friend int ClassThatWantsToUseTextureVariable::methodThatWantsToUseTextureVariable();

关于c++ - 将类型隐藏在类中并在内部使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32277878/

相关文章:

opengl - 一种生成 block 的方法

c++ - 如何检查片段是否位于纹理的边缘

c++ - SFML 内部 OpenAL 错误

c++ - 使用双向链表实现稀疏矩阵中的多项式

c++ - 如何告诉 g++ 编译器在哪里搜索包含文件?

c++ - 使用 0xFFFFFFFF 是一种可靠的方法来设置 32 位类型的所有位吗?

c++ - 如何在不留下 Unresolved external 问题的情况下在 Box2D 中创建一个世界

c++ - 如何从控制台读取空格分隔的数字?

c++ - Do/While 循环不循环

c++ - 在目标纹理上复制源纹理,其中源大于目标