Как объявить внутренний класс шаблона?

Я столкнулся с проблемой в объявлении внутреннего класса шаблона.

Я создал 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
Yuvi

0

Решение

Просто переместите его внутрь:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]