我正在创建一个共享库(.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;}
这很糟糕,因为我不希望图书馆的用户可以访问该内部变量...
你将如何处理这种情况?
答案 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();