2012-03-09 9 views
0

私はMFCを学ぶとき、私はいくつかのメカニズムを模倣したい、ここでは、私はちょうどMFCのメカニズムを模倣したいオブジェクトを作成するためのダイナミックの単純...あなたは、それを終わらせる方法。あなたはどのような問題を抱えているんMFC動的基盤のメカニズムを模倣する

class Object; 
struct classRuntime 
{ 
    Object* pBasedClass; 
    Object* pNextClass; 
    char* className; 
    Object* CreateClass(); 
}; 

class Object 
{ 
public: 
    static struct classRuntime ObjectClassRuntime; 
    Object() { 
     cout<<"Object constructor"<<endl; 
    } 
    static Object* CreateObject() { 
     return new Object; 
    } 
}; 

classRuntime Object::ObjectClassRuntime = {NULL, NULL, "Object", 
                  Object::CreateObject}; 

enter image description here

+0

...ありがとう!何のエラー?何が効いていないのですか? – nabulke

+0

多くのエラーがあります。これは私の考えです。私はそれらを整理する方法がわかりません。 –

+0

次に、問題を再現するためのエラーまたは素晴らしい完全な例を示してください。 – nabulke

答えて

1
class Object; 

struct ClassRuntime { 
    Object* basedClass; 
    Object* nextClass; 
    char*  className; 
    Object* (*instanceFactory)(); 
}; 

class Object 
{ 
public: 
    static const ClassRuntime ObjectClassRuntime; 
    Object() {} 
    static Object* CreateInstance() { return new Object; } 
}; 
const ClassRuntime Object::ObjectClassRuntime = {NULL, NULL, "Object", Object::CreateInstance}; 

class Toto : public Object 
{ 
public: 
    static const ClassRuntime TotoClassRuntime; 
    Toto() {} 
    static Object* CreateInstance() { return new Toto; } 
}; 
const ClassRuntime Toto::TotoClassRuntime = {NULL, NULL, "Toto", Toto::CreateInstance}; 
+0

助けてくれてありがとう...私の本には、 'Object * CreateObject();' 'Object *(* CreateObject)();'ではありません。あなたはそれを説明できますか?間違いですか?私は画像で質問を更新しました。 –

+0

間違いではなく、名前の違いだけです。あなたの例は 'CObject *(PASCAL * m_pfnCreateObject)'を持っています。 'PASCAL'は16ビットWindowsからのホールドオーバーです(無視しても問題ありません)。また' m_pfn'は "member、関数へのポインタ"の略です。それ以外の場合は同じです。 – MSalters

+0

CObject *(PASCAL * m_pfnCreateObject())があります。私のオブジェクト*(* CreateObject)()に似ているCRuntimeClassで;宣言。 私はCRuntimeClass :: CreateObjectの実装がm_pfnCreateObjectの呼び出しであると思われます。 – rlods

関連する問題