我正在创建一个共享库 (.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/