請參閱第一代碼:C++類層次結構
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
內BMstring
沒有任何實例BMfont
的訪問。
或者,如果我這樣做:
class BM_FONT_CALL BMstring : public std::string
{
std::function<void (void)> func;
public:
BMstring() { func = BMfont::Compile(); }
}
按製造BMfont
的Compile()
成員。 但這不會編譯。我怎樣才能做到這一點?
你能提供的示例源代碼?我沒有明白。請再看看帖子,我做了一個修改。 – mr5
好吧,我現在明白了。我從'std :: string'派生'BMstring'的原因是因爲我想重寫'std :: string'的賦值操作符,並在其中放置了'Compile()'函數。並且通過引用'BMfont',我不能這樣做'text =「some string」;' – mr5
在這種情況下,您可能需要一個字符串可以使用的'默認'字體,這可以是BMFont的靜態成員或您的BMString函數可以訪問的BMString。 – matt