将类型隐藏在 class 中并在内部使用
Hiding a type inside a class and use that internally
我正在创建一个共享库 (.so),我想隐藏我正在使用但没有成功的内部类型。我正在使用 SFML 进行绘图,但我想提供我自己的界面而不是 SFML 界面。
如果我这样做:
class Texture: public sf::Texture {
};
然后我就可以使用来自sf::Texture的界面了。但是我想要 sf::Texture 具有的函数的不同 return 类型(例如: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
是你的朋友。
class Texture {
friend class ClassThatWantsToUseTextureVariable;
public:
vec2 get_size() const{ return vec2(m_t.getSize()); }
private:
sf::Texture m_t;
};
或更好的方法是将将使用变量
的方法声明为友元
friend int ClassThatWantsToUseTextureVariable::methodThatWantsToUseTextureVariable();
我正在创建一个共享库 (.so),我想隐藏我正在使用但没有成功的内部类型。我正在使用 SFML 进行绘图,但我想提供我自己的界面而不是 SFML 界面。
如果我这样做:
class Texture: public sf::Texture {
};
然后我就可以使用来自sf::Texture的界面了。但是我想要 sf::Texture 具有的函数的不同 return 类型(例如: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
是你的朋友。
class Texture {
friend class ClassThatWantsToUseTextureVariable;
public:
vec2 get_size() const{ return vec2(m_t.getSize()); }
private:
sf::Texture m_t;
};
或更好的方法是将将使用变量
的方法声明为友元friend int ClassThatWantsToUseTextureVariable::methodThatWantsToUseTextureVariable();