隐藏类中的类型并在内部使用它

时间:2015-08-28 18:47:51

标签: 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;}

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

你将如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

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();