информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Страшный баг в WindowsВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] HE bug. 09.07.01 22:41  Число просмотров: 677
Автор: + <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.
<programming>
[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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach