Форум программистов, компьютерный форум, киберфорум
С++ под Linux
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Linux __asm__ tutorial https://www.cyberforum.ru/ cpp-linux/ thread48846.html
__asm__ tutorial нужно вставить немного кода на асме для чтения rdtsc, подскажите пожалуйста пару тройку туториалов по встраиванию инструкций асма в g++
xlib cairo утечка памяти C++ Linux
xlib cairo утечка памяти #include "xlib_cairo_window.h" #include <iostream> void xlib_cairo_window::paint() { XEvent e; cairo_show_page(cr); while(1) { XNextEvent(dpy, &e);...
C++ Linux Простейшие системные программы. Нужны примеры
Купил сегодня книгу Роберта Лава "Linux. Системное программирование". Да, книга в принципе неплохая, но одна проблемка - очень мало примеров. Буду очень благодарен если кто-нибудь даст примеры...
C++ Linux Обработку xml сообщения на языке Си Нужно сделать обработку xml сообщения на языке Си под FreeBSD! кто уже делал подскажите как это лучше сделать! заранее спасибо!!! https://www.cyberforum.ru/ cpp-linux/ thread47463.html
C++ Linux Какой-то баг в GCC https://www.cyberforum.ru/ cpp-linux/ thread47432.html
Переставил FreeBSD с 6 на 7. После этого перестала линковаться программа - компилируется без ошибок, но линковщик пишет /var/tmp//ccsaOcQc.o(.gnu.linkonce.t._ZN7CCookie7SetListERKSsS1_+0x66): In...
Не находит sqlplus.hh C++ Linux
Ознакомился с тутором на http://www.enderunix.org/documents/eng/mysql++.html установил себе на FreeBSD 7.0 этот API , но ситуация такая , что компилятор g++ не находит заголовочный файл sqlplus.hh и...
C++ Linux Создание системы тестирования ПО.
Собственно,хотел написать скрипт по тестированию программы отсюда https://www.cyberforum.ru/cpp-beginners/thread41218.html .В сети нашёл кое-какие примеры,например перенаправления вывода программы,но...
C++ Linux Eclipse-как сделать exe У меня такая проблема: кто работает на еклипсе, и кто может подсказать можно ли с етой среды сделать что-то вроди exe-файла, например такого как делается на си++ во время компиляции??? https://www.cyberforum.ru/ cpp-linux/ thread45329.html
C++ Linux Два процесcа могут использовать общий <map> ? https://www.cyberforum.ru/ cpp-linux/ thread45273.html
Поясните пожалуйста - суть вопроса такова Есть глобальный <map> почему дочернии процессы изминяя в нем данные - то другие процессы не видят изминения ! Вот пример кода
C++ Linux Ищу хороший самоучитель по Xlib Посоветуйте плз, учебник по xlib. (если таковой существует). https://www.cyberforum.ru/ cpp-linux/ thread45042.html
1 / 1 / 1
Регистрация: 29.08.2009
Сообщений: 63
0

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

05.09.2009, 08:47. Просмотров 1122. Ответов 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.