2012-12-21 78 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