请先查看代码:
class BM_FONT_CALL BMfont
{
public:
BMfont();
~BMfont();
bool Load(const std::string& fontName);
void Print(float x, float y);
class BM_FONT_CALL BMstring : public std::string
{
public:
BMstring() { }
BMstring(const char* str);
BMstring& operator=(const char* str);
BMstring operator+=(const char* str);
private:
void Compile();
};
public:
BMstring text;
float scale;
_uint32 tabSize;
_uint32 textureSheet;
_uint32 backTexture;
_uint32 frontTexture;
bool enableMasking;
_uint32 base;
_uint32 lineHeight;
_uint32 pages;
_uint32 scaleW, scaleH;
_uint32 kerninfo_count;
BMkerninfo *kerninfo;
BMchar chars[MAX_CHAR];
private:
std::string _fontName;
};
我如何BMstring
有权访问BMfont
的成员,好像BMstring
不会继承BMfont
的成员?例如,如果我这样做:
BMfont::BMstring text;
text.scale //I don't want this
我想在这里做的是,我希望BMstring::Compile()
能够访问BMfont
而BMfont
内没有任何BMstring
个实例。
或者如果我这样做:
class BM_FONT_CALL BMstring : public std::string
{
std::function<void (void)> func;
public:
BMstring() { func = BMfont::Compile(); }
}
成为Compile()
的{{1}}成员。
但这不会编译。我怎样才能做到这一点?
答案 0 :(得分:0)
最简单,最干净的方法是在BMString中使用引用,并将其传递给构造函数或编译方法。如果没有引用,BMfont和BMstring对象必须在内存中耦合,每个字体只有一个字符串 - 这肯定是不可取的。
答案 1 :(得分:0)
据我所知你想做这样的事情:
class C{
public:
C() : nested(*this)
{
}
void callNested()
{
nested.callOuter();
}
private:
class N{
public:
N(C &c) : outer(c)
{
}
void callOuter()
{
outer.OuterFunc();
// you have access to any C's member through outer
// reference
}
private:
C &outer;
};
N nested;
void OuterFunc()
{
}
};
int main()
{
C c;
c.callNested();
}