Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Предобъявление vector, deque, etc. 
V
    Опции темы
borisbn
Дата 12.8.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Добрый день.
Задался вопросом: а можно ли сделать forward declaration для vector или deque
Пробовал так:
Код

namespace std {
    template< class T >
    class allocator;

    template<class T, class A = allocator< T > >
    class vector;
};

получаю ошибку:
Цитата

1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(16) : warning C4348: 'std::vector' : redefinition of default parameter : parameter 2
1>        d:\work\qprojects\console\console\ddd.h(9) : see declaration of 'std::vector'

Можно ли это сделать вообще ?
Спасибо.

P.S. Думаю, из сообщения об ошибке ясно какой компилятор smile

Это сообщение отредактировал(а) borisbn - 12.8.2011, 12:59


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 12.8.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



borisbn
Если вы имели ввиду forwarding declaration, то можно так
template<class T, class A>
class vector;

Но это по стандарту не переносимо.
Дальше мысль не буду развивать, так как возможно не понял вашего вопроса - что вы подразумевали под "forwarding".



PM MAIL   Вверх
borisbn
Дата 12.8.2011, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(volatile @  12.8.2011,  10:15 Найти цитируемый пост)
Если вы имели ввиду forwarding declaration

Да, его (или её?). Поправил.
Так, как Вы сказали пробовал. При объявлении ф-ции
Код

namespace std {
    template<class T, class A >
    class vector;
};

inline void foo( const std::vector<int> & v ) {}

, использующую vector получаю другую ошибку
Цитата

1>d:\work\qprojects\console\console\ddd.h(16) : error C2976: 'std::vector' : too few template arguments
1>        d:\work\qprojects\console\console\ddd.h(13) : see declaration of 'std::vector'

и ещё кучу букаф.
А объявлять в параметрах ф-ции вектор с аллокатором ну оооооооочень не хочется


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 12.8.2011, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



borisbn, да сорри.
Но в любом случае, даже если вы введете алокатор, это не будет хорошим решением.
Насколько помню, в стандарте не оговаривается сколько аргументов по умолчанию в шаблоне может быть.
То есть вполне вилидна реализация вектора, например такая:
Код

template<class T, class A = something1<T>, class B = something2<T>, class C = something3<T> >
class vector;

знатоки стандарта попровят, если что... smile 
PM MAIL   Вверх
volatile
Дата 12.8.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Возник вопрос, а зачем? Если вы хотите уменьшить время компиляции, то включите <vector> в "stdafx.h"
Заголовки, включенные туда, по умолчанию будут скомпилирован заранее.
Это заметно увеличивает скорость компиляции больших проектов.

зы: правильное название "forward declaration"
PM MAIL   Вверх
borisbn
Дата 12.8.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(volatile @  12.8.2011,  11:28 Найти цитируемый пост)
Возник вопрос, а зачем?

1. Уменьшить время компиляции (про stdafx см. ниже)
2. Унифицировать стиль. А то получается, что всё, что можно объявить предварительно - я объявляю, а std-классы - включаю h-ник.
3. Уже просто из принципа интересно (академический вопрос) smile

По поводу stdafx:
1. У меня проект создаёт VS Qt Integrator, и он делает Not Using Precompiled Headers
2. Это как-то некроссплатформенно... хотя... может у gcc есть Precompiled Headers ? Надо выяснить

Цитата(volatile @  12.8.2011,  11:28 Найти цитируемый пост)
правильное название "forward declaration"

агхрррр. поправил


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Artemon
Дата 12.8.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Как можно увеличить скорость компиляции, если файл vector.h не изменяется (или вы его редактируете ?).



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
borisbn
Дата 12.8.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Artemon @  12.8.2011,  14:15 Найти цитируемый пост)
Как можно увеличить скорость компиляции, если файл vector.h не изменяется

Если не включен Precompiled Headers, то при изменении моего исходника, в который включен vector.h, последний будет перекомпилироваться.

Цитата(Artemon @  12.8.2011,  14:15 Найти цитируемый пост)
или вы его редактируете ?

я из ума ещё не выжил smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Artemon
Дата 12.8.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



У меня всегда стоит опция: "Not using precompiled headers" и перекомпиляция идет только измененных файлов и всех зависимых файлов.

VS2005 + Qt 4.4.3

Добавлено через 7 минут и 32 секунды
И еще не совсем понял про vector, в программу вы ведь включаете всеголишь заголовочный файл, а не исходник, поэтому что тут может перекомпилироваться ?

Это сообщение отредактировал(а) Artemon - 12.8.2011, 14:59


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 12.8.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  12.8.2011,  13:06 Найти цитируемый пост)
может у gcc есть Precompiled Headers ?

угу.

зы
так и не понял для чего это нужно.. стандартные хидеры, в сравнении с тем же к примеру boost.fusion - просто микрохидеры. никогда не замечал чтоб что-то медленно компилировалось из-за включения в проект:
Код

#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <multiset>
#include <multimap>
#include <algorithm>


по этому, наверное интерес чисто академический.
PM WWW   Вверх
borisbn
Дата 12.8.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Artemon @  12.8.2011,  14:58 Найти цитируемый пост)
И еще не совсем понял про vector, в программу вы ведь включаете всеголишь заголовочный файл, а не исходник

vector ведь шаблонный... у него нет исходника. только заголовочный и есть, а т.к. он включается в мой заголовочный файл, то при изменении моего исходника, включающего мой заголовочный файл, перекомпилироваться будут все три файла (мой cpp, мой h, vector.h)
Код

// my.cpp
#include "my.h"
...
// вот тут периодически что-то меняется
...


Код

// my.h
#include <vector>
...


Цитата(boostcoder @  12.8.2011,  15:11 Найти цитируемый пост)
по этому, наверное интерес чисто академический.

академический то, академический, но если мне понадобится то же самое сделать не с std-шными классами а с теми же boost'овскими ?

да и просто интересно уже - возможно ли ...

Это сообщение отредактировал(а) borisbn - 12.8.2011, 15:20


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Artemon
Дата 12.8.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Цитата(borisbn @  12.8.2011,  15:19 Найти цитируемый пост)
vector ведь шаблонный

Действительно 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 12.8.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  12.8.2011,  15:19 Найти цитируемый пост)
если мне понадобится то же самое сделать не с std-шными классами а с теми же boost'овскими ?

никогда не задавался таким вопросом.
повторюсь: смысла таки не вижу... ну сэкономишь ты 1мс на единице трансляции. и? smile 

Это сообщение отредактировал(а) boostcoder - 12.8.2011, 16:03
PM WWW   Вверх
spyswamp
Дата 12.8.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



borisbnhttp://stackoverflow.com/questions/307343/...n-stl-container читал?

Добавлено через 2 минуты и 19 секунд
А вот тут еще нехило поизвращались: http://stackoverflow.com/questions/555330/...ce-compile-time

Кстати, в этом плане разработчики boost большие молодцы, т.к. замутили свои хидеры с forward declaration'ом. ;)


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
borisbn
Дата 12.8.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(spyswamp @  12.8.2011,  16:46 Найти цитируемый пост)
borisbn, http://stackoverflow.com/questions/307343/...n-stl-container читал?

Нет. Как раз собирался туда писать... Спасибо ! Интересно (правда не сама сошка, а ссылка на groups.google и дальнейшая на open-std.org).
Получается (как и говорил volatile), что по стандарту я не застрахован от того, что какая-нить имплементация vector'а не будет иметь доп. параметров.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1158 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.