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