Форум программистов, компьютерный форум, киберфорум
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
1

линковка шаблона

05.09.2009, 08:47. Просмотров 1118. Ответов 1
Метки нет (Все метки)

линковка шаблона

Код
#ifndef intrusive_list__HHHH
#define intrusive_list__HHHH
struct link_err {
	string s;
	link_err(const char* pc):s(pc){}
};
struct slink { //base class for intrusive single linked list
	slink* next;
	slink(slink* p=0):next(p) {}
};
template<class T> class intrusive_list {
	T *head;
	T *last;
	unsigned int s;
//	size_t s;
	public:
	class iterator {
		T* p;
		public:
		iterator(T* pp):p(pp) {}
		iterator& operator++(int ) { p=static_cast<T*>(p->next); return *this; }
		T& operator*() { return *p; }
		bool operator==(const iterator& i) { return p==i.p; }
		bool operator!=(const iterator& i) { return p!=i.p; }
	};
	intrusive_list():head(0),last(0),s(0) {}
	iterator begin() { return iterator(head); }
	iterator end() { return iterator(0); }
	void push_front(T& t) ; 
	void push_back(T& t) ; 
	iterator& erase(iterator& i) {
		if (!s) throw link_err("empty error");
		s--;
		if (!s)  { 
			head=last=0;
			return 0;
		}
		if ( head == i.p ) {
			head=i.p->next;
			i.p->next=0;
			i++;
			return i;
		}
	}
};


template<class T> void intrusive_list<T>::push_front(T& t) { 
	s++;
	t.next=head;
	if(! last) last=&t;
	head=&t;
	return;
}
template<class T> void intrusive_list<T>::push_back(T& t) { 
	s++;
	if(! last)  head=last=&t;
	else {
		last->next=&t;
		last=&t;
	}
	return;
}
#endif
как вынести erase за пределы объявления класса? (чтобы получилось как push_front,push_back)

как вынести определения push_front,push_back,erase в отдельный translation unit?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2009, 08:47
Ответы с готовыми решениями:

Линковка либов)
#include &lt;cstdio&gt; #include &lt;unistd.h&gt; #include &lt;pthread.h&gt; void func1(void) { for...

Динамическая линковка
Привет! Делаю лабу...

Статическая линковка
Здравствуйте! У меня есть несколько файлов и мне нужно сделать из них статическую библиотеку вроде...

Линковка библиотек gcc под линукс
Подключаю Oracle Instant Client, скачал файлики rpm с ихнего сайта, установил их в линуксе (у меня...

1
Эксперт С++
3210 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.09.2009, 13:18 2
Реализацию шаблонов нужно писать в .h файле.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2009, 13:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Для использование шаблона переменной требуется список аргументов шаблона
Здравствуйте! Не могу понять в чём проблема. //ALL2.cpp #include &quot;pch.h&quot; #include &lt;iostream&gt;...

Gtest, доступ к элементам базового класса-шаблона без указания параметров шаблона. баг или фича?
Всем привет. Продолжаю экспертизу gtest/gmock. Количество ошибок и багов зашкаливает. ...

Определение метода-шаблона за пределами шаблона класса
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt;...

Линковка
Проблема с линковкой. Приложение компилируется, а когда доходит до стадии линковки выводит ошибку:...

Qt 5.1.1 статическая линковка
Да, наверное такая тема часто проскальзывает, но я все равно не понял...(( Я начал изучать Qt и...

Статическая линковка Qt 5.6
Решил я обновить Qt до 5.6. После чего надо было собрать комплект статической сборки. Решил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.