2011-01-30 38 views

回答

2

我想你想要的是比單身更接近MonoState

MonoState通過使所有對象通過靜態成員變量共享相同的狀態。雖然實例不同,但這些實例返回的數據是相同的。這是一個簡單的實現:

class MonoStateSession { 
private: 
    static int _SessionId; 

public: 
    void SetSessionId(int newSessionId) { 
    //Put threading checks/locks here 
    _SessionId = newSessionId; 
    } 

    int GetSessionId() { 
    return _SessionId; 
    } 
} 

//Usage 
MonoStateSession session1 = new MonoStateSession(); 
session1.SetSessionId(123); 
MonoStateSession session2 = new MonoStateSession(); 
assert(session2.GetSessionId() == 123); 
1

不......但你可以接近。例如,你可以創建一個類,每一個實例只是同一個真實物體的克隆...例如:

struct TheRealObject 
{ 
    std::string s; 

    TheRealObject() { ... } 
    void foo(int x) { ... } 
    double bar(char y) { ... } 

    static TheRealObject& getInstance() 
    { 
     static TheRealObject trb; 
     return trb; 
    } 
}; 

struct MyObject 
{ 
    std::string& s; 

    MyObject() : s(TheRealObject::getInstance().s) {} 

    void foo(int x) { TheRealObject::getInstance().foo(x); } 
    double bar(char y) { return TheRealObject::getInstance().bar(y); } 
}; 

注意,每MyObject實例仍然將是一個不同的對象(與它自己的地址,例如),但它們只是作爲蹦牀的唯一方法和數據成員訪問方面的現有TheRealObject

你爲什麼想做這種奇怪的事情?也許你只是想找一個單身人士(就像上面的TheRealObject)?

相關問題