如何声明内部模板类

How to declare inner template class?

本文关键字:内部 声明 何声明      更新时间:2023-10-16

我在内部模板类的声明中遇到了问题。

我在a.h中创建了一个Class A我的代码是这样的

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;
}

任何帮助都将是非常感激的,

谢谢,BRYuvi

把它移到里面:

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()