информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Блокировка российских аккаунтов... 
 Отзыв сертификатов ЦБ РФ, ПСБ,... 
 Памятка мирным людям во время информационной... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] MSVC6 bug. 09.07.01 13:43  
Автор: Yehor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
попробуйте получить адекватный печатный результат из работы следующего кода:

#include <iostream> #include <string> using namespace std; //1: //template<class T> class A{}; template<class T> inline string typeName( /*2: const T = T() */ ) { return typeid( T ).name(); } void main() { cout << typeName<bool>() << endl << typeName<int>() << endl << typeName<char>() << endl << typeName<double>()<< endl // 3: // << typeName<A<bool> >() << endl ; }

у меня все функции инстанцируются с double. Уберите комментарии 1 и 3. будет вечный A<bool>. Раскомментируйте 2. Все ОК. А теперь, внимание, вопрос: как, принимая во внимание весь этот цирк, ПЕРЕГРУЗИТЬ шаблонную функцию для определенного типа, скажем, чтоб для A<bool> возвернуть не "class A<bool>", что по умолчанию, а "хелло, Билли"? ОЧЕНЬ занимательные экперименты получаются... :((

спасибо
[C++] HE bug. 09.07.01 22:41  
Автор: + <Mikhail> Статус: Elderman
Отредактировано 09.07.01 22:53  Количество правок: 1
<"чистая" ссылка>
Eto ne bug . copmiler sozdaet tolko odnu instance etoii fuction. I dlia raznyh typov argumentov proishodit konversia tipa, tak kak v etom primere net argumentov to ni kakoi konversii ne proishodit a ispolnietsa code functii kotoraiy byka pervaia naidene compilerom v nashem sluchae eto typeName<double>() , pomeniai etu function s typeName<char>() mestami i vse stanet aisno.

A eche sdelai tak:
template<class T>
inline string typeName( T t)
{
return typeid( T ).name();
}

void main()
{
cout << typeName<bool>(1) << endl
<< typeName<int>(1) << endl
<< typeName<double>(1)<< endl
<< typeName<char>(1) << endl ;
}

Nu kak resultat?
P.S. ne nado srazu krichat` na vse BUG!!!! snachalo hado vnimatelho pochitat` po teme.
[C++] [C++] HE bug. 10.07.01 13:48  
Автор: Yehor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Результат твой малоценен. И запись странная. Этого я сам добивался еще более простым способом:

template<class T>
inline string typeName( const T& = T() )
{
return typeid( T ).name();
}

Только эту функцию уже не перегрузишь. Параметр по умолчанию не дает.

Ладно, а что делать с более сложными классами? Создавать экземпляры классов (возможно, достаточно громоздкие) только для того, чтоб узнать его имя??

Какая нафиг конверсия типов может присутствовать в случае, когда я более чем ЯВНО указываю тип инстанцирования? Что за мудрствования со стороны компилятора?
К слову, Borland C++ Builder такой наглости себе не позволяет. Тот же код работает под ним, как ожидается...
[C++] [C++] HE bug. 10.07.01 21:31  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Ty krichal chto eto bug , tak bot eto ne bug i I tebe ob`iasnil pochemu. My govorili pro MS compiler na drugih ne znau (ne uduvlush esli u BORLAND po drugomu). Voobche vse etu sluchaii vsegda opisanu v HELP. Tal chto rekomenduu pochache tuda zagliadyvat`, delnye vechi inogda mozno prochitat`.
[C++] [C++] HE bug. 10.07.01 13:53  
Автор: Yehor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> template<class T>
> inline string typeName( const T& = T() )
> {
> return typeid( T ).name();
> }
>
> Только эту функцию уже не перегрузишь. Параметр по
> умолчанию не дает.

Пардон, перегрузке функция все же подлежит. Я ошибся.

template<>
inline string typeName<int>( const int& )
{
return "целее и знаковее некуда";

}
[C++] Это еще что... 09.07.01 14:29  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
В Мастайском дебугере GetPixel выдает значение цвета только для 16К-цветных контекстов. Я целый год был убежден, что зту ф-ция поддерживается только в 16К-цветных режимах, завалил из-за этого ценный проект. А потом, случайно в ВинАйсе увидел, как 8-битный контекст лихо возвращает пикселы и строки... Меня чуть Кондрат не хватил! Qwertyuiёб! (В смысле Ёпрст)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2022 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach