0

内部テンプレート クラスの宣言で問題に直面しています。

ここに作成しClass Aましa.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 ユヴィ

4

1 に答える 1

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()
于 2012-12-21T08:10:10.487 に答える