| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Предобъявление vector, deque, etc. |
| Автор: borisbn 12.8.2011, 09:40 | ||||
| Добрый день. Задался вопросом: а можно ли сделать forward declaration для vector или deque Пробовал так:
получаю ошибку:
Можно ли это сделать вообще ? Спасибо. P.S. Думаю, из сообщения об ошибке ясно какой компилятор |
| Автор: volatile 12.8.2011, 10:15 |
| borisbn Если вы имели ввиду forwarding declaration, то можно так template<class T, class A> class vector; Но это по стандарту не переносимо. Дальше мысль не буду развивать, так как возможно не понял вашего вопроса - что вы подразумевали под "forwarding". |
| Автор: borisbn 12.8.2011, 10:21 | ||||
Да, его (или её?). Поправил. Так, как Вы сказали пробовал. При объявлении ф-ции
, использующую vector получаю другую ошибку
и ещё кучу букаф. А объявлять в параметрах ф-ции вектор с аллокатором ну оооооооочень не хочется |
| Автор: volatile 12.8.2011, 10:38 | ||
| borisbn, да сорри. Но в любом случае, даже если вы введете алокатор, это не будет хорошим решением. Насколько помню, в стандарте не оговаривается сколько аргументов по умолчанию в шаблоне может быть. То есть вполне вилидна реализация вектора, например такая:
знатоки стандарта попровят, если что... |
| Автор: volatile 12.8.2011, 11:28 |
| Возник вопрос, а зачем? Если вы хотите уменьшить время компиляции, то включите <vector> в "stdafx.h" Заголовки, включенные туда, по умолчанию будут скомпилирован заранее. Это заметно увеличивает скорость компиляции больших проектов. зы: правильное название "forward declaration" |
| Автор: borisbn 12.8.2011, 13:06 |
1. Уменьшить время компиляции (про stdafx см. ниже) 2. Унифицировать стиль. А то получается, что всё, что можно объявить предварительно - я объявляю, а std-классы - включаю h-ник. 3. Уже просто из принципа интересно (академический вопрос) По поводу stdafx: 1. У меня проект создаёт VS Qt Integrator, и он делает Not Using Precompiled Headers 2. Это как-то некроссплатформенно... хотя... может у gcc есть Precompiled Headers ? Надо выяснить агхрррр. поправил |
| Автор: Artemon 12.8.2011, 14:15 |
| Как можно увеличить скорость компиляции, если файл vector.h не изменяется (или вы его редактируете ?). |
| Автор: Artemon 12.8.2011, 14:58 |
| У меня всегда стоит опция: "Not using precompiled headers" и перекомпиляция идет только измененных файлов и всех зависимых файлов. VS2005 + Qt 4.4.3 Добавлено через 7 минут и 32 секунды И еще не совсем понял про vector, в программу вы ведь включаете всеголишь заголовочный файл, а не исходник, поэтому что тут может перекомпилироваться ? |
| Автор: boostcoder 12.8.2011, 15:11 | ||
угу. зы так и не понял для чего это нужно.. стандартные хидеры, в сравнении с тем же к примеру boost.fusion - просто микрохидеры. никогда не замечал чтоб что-то медленно компилировалось из-за включения в проект:
по этому, наверное интерес чисто академический. |
| Автор: borisbn 12.8.2011, 15:19 | ||||||
vector ведь шаблонный... у него нет исходника. только заголовочный и есть, а т.к. он включается в мой заголовочный файл, то при изменении моего исходника, включающего мой заголовочный файл, перекомпилироваться будут все три файла (мой cpp, мой h, vector.h)
академический то, академический, но если мне понадобится то же самое сделать не с std-шными классами а с теми же boost'овскими ? да и просто интересно уже - возможно ли ... |
| Автор: Artemon 12.8.2011, 15:24 |
Действительно |
| Автор: boostcoder 12.8.2011, 16:02 | ||
никогда не задавался таким вопросом. повторюсь: смысла таки не вижу... ну сэкономишь ты 1мс на единице трансляции. и? |
| Автор: spyswamp 12.8.2011, 16:46 |
| borisbn, http://stackoverflow.com/questions/307343/forward-declare-an-stl-container читал? Добавлено через 2 минуты и 19 секунд А вот тут еще нехило поизвращались: http://stackoverflow.com/questions/555330/templates-use-forward-declarations-to-reduce-compile-time Кстати, в этом плане разработчики boost большие молодцы, т.к. замутили свои хидеры с forward declaration'ом. ;) |
| Автор: borisbn 12.8.2011, 17:05 | ||
Нет. Как раз собирался туда писать... Спасибо ! Интересно (правда не сама сошка, а ссылка на groups.google и дальнейшая на open-std.org). Получается (как и говорил volatile), что по стандарту я не застрахован от того, что какая-нить имплементация vector'а не будет иметь доп. параметров. |
| Автор: spyswamp 12.8.2011, 20:57 |
| borisbn, оффтоп: ну, да, ссылку на comp.std.c++.moderated не стал так выделять, т.к. это очевидно, что ты туда зашел бы. ;) |