2012-12-21 76 views
0

我在內部模板類的聲明中面臨問題。如何聲明內部模板類?

我已創建一個Class Aa.h這裏是我的代碼看起來像

class A 
{ 
    public: 

    private: 
    // How declare LockFreeQueue here 

}; 

template <typename T> 
struct LockFreeQueue 
{ 
     LockFreeQueue(); 
     void push(const T& t); 
     bool pop(T& t); 
    private: 
     typedef std::list<T> TList; 
     TList list; 
     typename TList::iterator iHead, iTail; 

}; 

/** 
* Constructor 
* Initializes required variables 
* */ 
template <typename T> 
LockFreeQueue<T>::LockFreeQueue() 
{ 
    list.push_back(T()); 
    iHead = list.begin(); 
    iTail = list.end(); 
} 

/** 
* pushes data in the list 
* @param datatype that needs to be pushed 
* */ 
template <typename T> 
void LockFreeQueue<T>::push(const T& t) 
{ 
    list.push_back(t); 
    iTail = list.end(); 
    list.erase(list.begin(), iHead); 
} 

/** 
* Pops Queue 
* @param t stores popped data at t's address 
* @return true if data available, false otherwise 
* */ 
template <typename T> 
bool LockFreeQueue<T>::pop(T& t) 
{ 
    typename TList::iterator iNext = iHead; 
    ++iNext; 
    if (iNext != iTail) 
    { 
    iHead = iNext; 
    t = *iHead; 
    return true; 
    } 
    return false; 
} 

任何幫助將高度讚賞,

感謝& BR Yuvi

+0

你想聲明類本身內部,或者類類型的成員? –

回答

3

只是裏面移動它:

class A 
{ 
    public: 

    private: 

     template <typename T> 
     struct LockFreeQueue 
     { 
      LockFreeQueue(); 
      void push(const T& t); 
      bool pop(T& t); 
     private: 
      typedef std::list<T> TList; 
      TList list; 
      typename TList::iterator iHead, iTail; 
     }; 
}; 

並添加A範圍界定時,是這樣的:

template <typename T> 
A::LockFreeQueue<T>::LockFreeQueue() 
+0

然後我可以聲明它, 這樣的'LockFreeQueue mQueue;'在私人範圍內的A? – Yuvi

+0

@Yuvi裏面'A'聲明,內部類聲明後 – SomeWittyUsername