Так вот использование метода класса становится затруднительным.
Посоветуйте чего нибудь, пожалуйста. Разум возмущенный мой кипит, но удовлетворительного ответа не находит.
Не удовлетворительные варианты таковы (по ряду причин не подходят):
1. Переставить местами включение заголовков.
2. Воспользоваться
#undef
.
3. Заменить макроопределение функцией.
4. Поменять имя метода.
T>Так вот использование метода класса становится затруднительным. T>Посоветуйте чего нибудь, пожалуйста. Разум возмущенный мой кипит, но удовлетворительного ответа не находит. T>Не удовлетворительные варианты таковы (по ряду причин не подходят): T>1. Переставить местами включение заголовков. T>2. Воспользоваться
#undef
. T>3. Заменить макроопределение функцией. T>4. Поменять имя метода.
T>Может у кого найдутся еще варианты?
Если не ошибаюсь, можно перед GetObject ставить "::", тогда будет вызываться глобальный метод (в данном случае — макро, как я понял), если не ставить, то, ясное дело, локальный.
А еще, если так не прокатит, можно просто рисовать "this->GetObject()"
Здравствуйте, CyberDemon, Вы писали:
CD>Если не ошибаюсь, можно перед GetObject ставить "::", тогда будет вызываться глобальный метод (в данном случае — макро, как я понял), если не ставить, то, ясное дело, локальный. CD>А еще, если так не прокатит, можно просто рисовать "this->GetObject()"
Не, макросу до лампочки — заменит, и все.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
включить файл с этим макроопределением в 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_ и не связывайся. :)