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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разименование итератора, что хорошо в 6 студии, то для 7 смерть 
:(
    Опции темы
mr.DUDA
Дата 6.10.2003, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



STLPort отлично компилится во всех Визуалах.


--------------------
user posted image
PM MAIL WWW   Вверх
DENNN
Дата 7.10.2003, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Да для меня использовать тот же STLport не проблема. Но этот код я потом отдаю другим людям, а там еще нужно объяснить сначала что такое STL и почему это мне такая крутакая от гиганта M$ не подошла smile.gif
Вот и пытаясь понять: какой обходной маневр найти, чтоб работала и на VC7.1 и на классических реализациях? (этож надо так извратится, чтоб даже reinterpret_cast<> не помогал!)
PM ICQ   Вверх
RAN
Дата 7.10.2003, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
этож надо так извратится, чтоб даже reinterpret_cast<> не помогал

Ничего сложного. Как можно класс к указатели привести?

class A {
...........
};

A a;

void *p = reinterpret_cast<void*>(a); //ошибка
PM MAIL ICQ   Вверх
Fantasist
Дата 7.10.2003, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата
Вот и пытаясь понять: какой обходной маневр найти, чтоб работала и на VC7.1 и на классических реализациях?


Напиши свой каст типа:

Код

template <class T,class IT>
T iterator_cast(IT iter)
{
#ifdef VISUAL_STUDIO.NET
     return iter.base();
#else
     return iter;
#endif

}


int main()
{
std::vector<int> vec;
vec.push_back(10);

std::vector<int>::iterator iter=vec.begin();

void*p=iterator_cast<void*>(iter);

}


Это сообщение отредактировал(а) Fantasist - 7.10.2003, 23:14


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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Ну вот: отдал вчера порцию кода дальше и от МС опять сюрприз:
случайно в коде осталось одно выражение вида iterator.base(). Так вот в VS2003.NET (VS 7.10) у итератора нет такого метода smile.gif
Я в осадке. smile.gif
PM ICQ   Вверх
RAN
Дата 9.10.2003, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



smile.gif
Жаль мне тебя.

Включи в свой проект директорию STL и передавай source со своей stl

Или откажись от STL

Или используй итераторы только так, как они будут работать в любой реализации.
PM MAIL ICQ   Вверх
DENNN
Дата 9.10.2003, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Да я так и делаю, пишу:
Код

(void*)&(*conteiner.begin())

PM ICQ   Вверх
DENNN
Дата 9.10.2003, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Цитата
Или откажись от STL

Очень проблематично: сначала считываються и парсятся файлы больших объемов, а затем большое кол-во котейнеров используется для динамической генерации 3D ландшафта в 3D графике. Без отлаженных быстрых STL-алгоритмов мне нужно кучу собственных дописывать - да и скорость будет уже не та sad.gif
PM ICQ   Вверх
Fantasist
Дата 10.10.2003, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата
Включи в свой проект директорию STL и передавай source со своей stl


Это уж слишком сурово. Говорю же - делай свое преобразование. И наглядно, и переноситься легко.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
DENNN
Дата 10.10.2003, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

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



Цитата
Говорю же - делай свое преобразование.

Цитата
Напиши свой каст типа:

CODE

template <class T,class IT>
T iterator_cast(IT iter)
{
#ifdef VISUAL_STUDIO.NET
    return iter.base();
#else
    return iter;
#endif

}


int main()
{
std::vector<int> vec;
vec.push_back(10);

std::vector<int>::iterator iter=vec.begin();

void*p=iterator_cast<void*>(iter);

}

Я же говорю, что в VS2003 (иначе называют 7.10) у итератора нет метода base()
Получается что надо делать две проверки на версию 7.0 и на версию 7.10. Это конечно не сложно, вот только если в следующей версии опять что-то поменяют (добавят nbgf virtual_base()) начнуться крики "у нас не компилится!" smile.gif
PM ICQ   Вверх
Fantasist
Дата 10.10.2003, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата
Я же говорю, что в VS2003 (иначе называют 7.10) у итератора нет метода base()


Ну так все равно же легче переносить - только одну функцию изменить надо. Можно, конечно, вообще написать твое преобразование внутри этой функции, хотя оно не столь эффективно. Тогда и ее менять не надо будет, а выглядит гораздо нагляднее.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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