Шаблоны в cpp, что и как?

Как отделить реализацию шаблона от его объявления?


К примеру:

queue.h:
template<class T> queue{
struct item{
   atomic<T> itm
   item*next
}
queue();
push();
pop();
~queue();
}



queue.cpp
template<typename  T>
queue<T>::queue()
{
	Head=new qq;
	End=Head;
}

template<typename  T>
void queue<T>::push(T* item){
	try{
		Logger("Function::%s position:%s:%i",__FUNCTION__,__FILE__,__LINE__);
		item* t=new item;
		t->item=NULL;
		t->next=NULL;
		End->itm=new atomic<T*>;
		End->itm->store(item);
		End->next=t;
		End=End->next;
	}
	catch(...){
		Exout("Exception::%s position:%s:%i",__FUNCTION__,__FILE__,__LINE__);
		throw;
	}
}
и т.д.



Код в данном виде, в тем месте, где используется шаблон, выдает ошибку линковки


П.с. зачем надо: GUI проекта написано на .NET, и студия говорит, что не может одновременно использовать CLR и atomic.

П.п.с: VS 2012, стандарт с++2011
  • Вопрос задан
  • 3944 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Если используемые T известны заранее, можно в queue.cpp явно инстанцировать нужные типы.
Например:
template class queue<int>;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Chaos_Optima
@Chaos_Optima
#include «queue.cpp»
Ответ написан
Комментировать
barmaley_exe
@barmaley_exe
И что же компилятор должен скомпилировать из cpp файла? Какой объектный файл получится?
Реализацию шаблонных методов / функций нельзя выносить в отдельный translation unit, следуйте совету Chaos_Optima
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы