Пожалуйста, смотрите первый код: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
«s членам, как будто BMstring
не наследуют BMfont
» s членов? Например, если я делаю это:
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()
членом BMfont
. Но это не скомпилируется. Как я могу это достичь?
Можете ли вы привести пример исходного кода? Я не понял. И, пожалуйста, снова посмотрите на сообщение, я сделал редактирование. – mr5
Хорошо, я понял. Причина, по которой я вывел 'BMstring' из' std :: string', заключается в том, что я хочу переопределить оператор присваивания 'std :: string' и поставить там функцию' Compile() '. И, сделав ссылку на 'BMfont', я не могу это сделать' text = "some string"; ' – mr5
, тогда вам может понадобиться шрифт по умолчанию, который может использовать строка, это может быть статический член либо BMFont, либо BMString, доступ к которой может получить ваша функция BMString. – matt