0

最初にコードを見てください:

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アクセスできますか? たとえば、これを行うと:BMfontBMstringBMfont

BMfont::BMstring text;
text.scale //I don't want this

ここでやりたいことは、insideのインスタンスなしでBMstring::Compile()にアクセスできるようにすることです。BMfontBMfontBMstring


または、これを行うとどうなりますか:

class BM_FONT_CALL BMstring : public std::string
{

    std::function<void (void)> func;

public:

    BMstring() { func = BMfont::Compile(); }

}

Compile()メンバーにすることによってBMfont。しかし、これはコンパイルされません。どうすればこれを達成できますか?

4

2 に答える 2

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();
}
于 2013-05-29T11:27:39.873 に答える