Поубивал бы...
От: Patalog Россия  
Дата: 13.11.03 11:13
Оценка:
Hi, All!

Ну и как это назвать —
[from SGI OpenGL Optimizer, opRegMesh.h]
#define F this->operator()



Компилятор выдает очень веселые ошибки например на
struct A
{
       template<typename T, class F>
       static void call(T val, F function) { }
};

[в другой библиотеке]



И ведь вроде солидная контора...
Почетный кавалер ордена Совка.
Re: Поубивал бы...
От: Кодт Россия  
Дата: 13.11.03 11:31
Оценка: :))) :)
Здравствуйте, Patalog, Вы писали:

P>Ну и как это назвать —


"Скажите, как правильно — piece of paper или sheet of paper? -- Скажи уж сразу piece of ..."

Авиакомпания TWA предупраждает пассажиров:

Please, be carefull opening overhead bins, as items may have shifted during the flight... and as we all know, shift happens.

(Будьте осторожны, открывая багажные полки: во время полета вещи могли сдвинуться...)
Перекуём баги на фичи!
Re: Поубивал бы...
От: Кодт Россия  
Дата: 13.11.03 11:35
Оценка: 43 (2)
Здравствуйте, Patalog, Вы писали:

P>[from SGI OpenGL Optimizer, opRegMesh.h]

P>
P>#define F this->operator()
P>

P>

В таких случаях нужно строго следовать такой схеме

#ifdef F
#error F is already defined
#endif

#define F this->operator()

Class::method()
{
  F(x);
  F(y);
}
...


#undef F

Так что, возможно, тебе достаточно будет вписать последнюю строчку в opRegMesh.h

Или можно пойти другим путем: this->operator()(x,y,z) == (*this)(x,y,z). Найти вхождения F и заменить на (*this)
Перекуём баги на фичи!
Re[2]: Поубивал бы...
От: Patalog Россия  
Дата: 13.11.03 13:02
Оценка:
Здравствуйте, Кодт, Вы писали:

[]

Примерно так и обошел
#if defined (F)
#undef F
#endif

после включения opRegMesh.h

К>Так что, возможно, тебе достаточно будет вписать последнюю строчку в opRegMesh.h


Я с трепетом отношусь к не моим библиотечним файлам...

К>Или можно пойти другим путем: this->operator()(x,y,z) == (*this)(x,y,z). Найти вхождения F и заменить на (*this)


Радикально.
Почетный кавалер ордена Совка.
Re: Поубивал бы...
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 14.11.03 13:11
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Ну и как это назвать —

P>[from SGI OpenGL Optimizer, opRegMesh.h]
P>
P>#define F this->operator()
P>

P>

Ха.
Вот из моего поминальника на чистую установку BCB5

///////////////////////////////////////////////////////////////////////////////
//BUILDER C++ 5.0 (build 12.34 update pack 1)

....
7 richedit.h
добавить в конце файла
#undef wReserved

Эти ублюдки ...
....


Описание испытанных теплых чувств я опущу.

Так что... здоровый цинизм по отношению к "богам" программирования из больших контор никогда не помешает

Лично я давно забил на "трепетное" отношение и завел в нашем CVS каталог куда сваливаю исправленные "системные" хэдеры
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Поубивал бы...
От: SWW Россия  
Дата: 14.11.03 14:01
Оценка:
Однажды мне понадобилось создать две переменные, означающие радиусы. Я их, естественно, назвал rad1 и rad2. Однако компилятор стал ругаться страшными словами. Через час поисков я обнаружил в недрах компилятора файл <dlgs.h>
//
//  Radio buttons.
//
#define rad1        0x0420
#define rad2        0x0421
#define rad3        0x0422
#define rad4        0x0423
#define rad5        0x0424
#define rad6        0x0425
#define rad7        0x0426
#define rad8        0x0427
#define rad9        0x0428
#define rad10       0x0429
#define rad11       0x042a
#define rad12       0x042b
#define rad13       0x042c
#define rad14       0x042d
#define rad15       0x042e
#define rad16       0x042f
<...>
//
//  Listboxes.
//
#define lst1        0x0460
#define lst2        0x0461
#define lst3        0x0462
#define lst4        0x0463
#define lst5        0x0464
#define lst6        0x0465
#define lst7        0x0466
#define lst8        0x0467
#define lst9        0x0468
#define lst10       0x0469
#define lst11       0x046a
#define lst12       0x046b
#define lst13       0x046c
#define lst14       0x046d
#define lst15       0x046e
#define lst16       0x046f
<...>


И еще 250 строк подобных макросов — все короткие и маленькими буквами. С тех пор я испытываю самые теплые чувства к мелкософту.
Re: Поубивал бы...
От: Денис Майдыковский Россия http://www.maydyk.com
Дата: 17.11.03 15:16
Оценка:
Здравствуйте, Patalog, Вы писали:


А вот ещё до кучи.

Попробуйте написать в коде следующее


HRESULT hr  S_OK;         // пропущен знак равенства


И ничего, скомпилируется и будет работать, а всё почему?
А всё потому что

#define S_OK (0)
Re: Поубивал бы...
От: gloomy rocker Россия  
Дата: 19.11.03 09:24
Оценка: :)
Здравствуйте, Patalog, Вы писали:

P>Hi, All!


P>Ну и как это назвать —

P>[from SGI OpenGL Optimizer, opRegMesh.h]
P>
P>#define F this->operator()
P>

P>

P>Компилятор выдает очень веселые ошибки например на

P>
P>struct A
P>{
P>       template<typename T, class F>
P>       static void call(T val, F function) { }
P>};
P>

P>[в другой библиотеке]

P>


P>И ведь вроде солидная контора...


А вот фрагмент и atlrx.h (VS. 7.0). Строка 520.
            case RE_SYMBOL:
                if (GetInstruction(ip).symbol.nSymbol == /*(unsigned char)*/*sz)
                {
                    sz = CharTraits::Next(sz);
                    ip++;
                }
                else
                {
                    ip = (size_t) pContext->Pop();
                }
                break;

Из за приведения к unsigned char CAtlRegEx отказывался работать с русскими символами, т.к. в моем проекте *sz был типа *wchar_t.
Пришлось забить на трепетное отношение к чужим исходникам .
... << RSDN@Home 1.1 beta 2 >>
Скука — двигатель прогресса.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.