T>Так вот использование метода класса становится затруднительным. T>Посоветуйте чего нибудь, пожалуйста. Разум возмущенный мой кипит, но удовлетворительного ответа не находит. T>Не удовлетворительные варианты таковы (по ряду причин не подходят): T>1. Переставить местами включение заголовков. T>2. Воспользоваться
#undef
. T>3. Заменить макроопределение функцией. T>4. Поменять имя метода.
T>Может у кого найдутся еще варианты?
Если не ошибаюсь, можно перед GetObject ставить "::", тогда будет вызываться глобальный метод (в данном случае — макро, как я понял), если не ставить, то, ясное дело, локальный.
А еще, если так не прокатит, можно просто рисовать "this->GetObject()"
Здравствуйте, CyberDemon, Вы писали:
CD>Если не ошибаюсь, можно перед GetObject ставить "::", тогда будет вызываться глобальный метод (в данном случае — макро, как я понял), если не ставить, то, ясное дело, локальный. CD>А еще, если так не прокатит, можно просто рисовать "this->GetObject()"
Не, макросу до лампочки — заменит, и все.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Так вот использование метода класса становится затруднительным.
Посоветуйте чего нибудь, пожалуйста. Разум возмущенный мой кипит, но удовлетворительного ответа не находит.
Не удовлетворительные варианты таковы (по ряду причин не подходят):
1. Переставить местами включение заголовков.
2. Воспользоваться
#undef
.
3. Заменить макроопределение функцией.
4. Поменять имя метода.
включить файл с этим макроопределением в stdafx.h, поскольку он подключается всегда первым, насколько я помню.
тогда препроцессор тебе переименует все и везде, и все будет работать.
ИМХО, никак. Из общих рассуждений:
Макросы думать не умеют. Он заменит все, где только найдет. Раз undef не подходит — отключить ты его не сможешь. Я только не пойму, почему undef не подходит. Отчего бы не
Здравствуйте, centurn, Вы писали:
C>Здравствуйте, tousled, Вы писали:
C>Я бы в своем классе просто метод переименовал, если это возможно, конечно.
Для этого надо перелапатить пару десятков мегабайт кода
C>ЗЫЖ А вообще, Микрософт — ... известно кто...
В контексте этого топика я присоеденю к этой компании Borland, Sun и Intel, поскольку в своих библиотеках они тоже подобные макросы используют...
Это решение надо предложить Мелкомягким. Если я напишу это в своем заголовке, локально проблема конечно решится, но я не смогу гарантировать (группа разработки 54 чела), что раньше моего заголовка не включится другой заголовок использующий GetObject. Тогда-то все и отвалится...
Здравствуйте, jazzer, Вы писали:
J>включить файл с этим макроопределением в stdafx.h, поскольку он подключается всегда первым, насколько я помню. J>тогда препроцессор тебе переименует все и везде, и все будет работать.
1. Проект мультиплатформенный, потому для сборки используются mak-файлы. Ни о каком stdafx.h не может быть и речи (это приблуда MS, а кроме MSVC есть еще много компиляторов). Даже если выделить один общий заголовок, то сделать это можно только в пределах одного модуля, а модулей этих ~70.
2. Идея сама по себе порочна. Юзверь класса смотрит заголовок (там написано GetObject), а компилятор ему и говорит: Нефига мол "Is not member!"
J>P.S. Макросы — зло
С большой буквы!
Здравствуйте, tousled, Вы писали:
T>Здравствуйте, jazzer, Вы писали:
J>>включить файл с этим макроопределением в stdafx.h, поскольку он подключается всегда первым, насколько я помню. J>>тогда препроцессор тебе переименует все и везде, и все будет работать. T>1. Проект мультиплатформенный, потому для сборки используются mak-файлы. Ни о каком stdafx.h не может быть и речи (это приблуда MS, а кроме MSVC есть еще много компиляторов). Даже если выделить один общий заголовок, то сделать это можно только в пределах одного модуля, а модулей этих ~70.
1. Согласись, логично, увидев кусок виндовского хедера, предположить, что разработка ведется на MSVC, не говоря уже о том, что она одноплатформенная :)
2. Precompiled headers — приблуда не только MS.
3. Рассмотри вариант с явным инклудом виндовского хедера с этим макросом в хедер твоего класса.
T>2. Идея сама по себе порочна. Юзверь класса смотрит заголовок (там написано GetObject), а компилятор ему и говорит: Нефига мол "Is not member!"
4. Если юзверь не только смотрит, а еще и компилит, то этот макрос должен быть в этом файле включен. см. п.3
Тогда компилятор ему слова не скажет.
J>>P.S. Макросы — зло :)) T>С большой буквы! :-\
5. Переименуй вообще этот метод нафиг в какой-нть _get_object_ и не связывайся. :)