информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыSpanning Tree Protocol: недокументированное применениеВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[C++] [C++] HE bug. 10.07.01 13:53  Число просмотров: 773
Автор: Yehor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> template<class T>
> inline string typeName( const T& = T() )
> {
> return typeid( T ).name();
> }
>
> Только эту функцию уже не перегрузишь. Параметр по
> умолчанию не дает.

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

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

}
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach