Я иногда умышленно игнорирую макро аргументы. Например, для функционально-подобного макроса, такого как
#define MY_MACRO(A, B, C) ...
Я бы назвал его как:
MY_MACRO(, bar, baz)
Есть еще 3 аргумента. это просто, что первый из них "пуст". Этот вопрос касается не переменных массивов.
Когда я это делаю, я получаю предупреждения от g++ при компиляции с -ansi
(aka -std=c++98
), но не тогда, когда я использую -std=c++0x
. Означает ли это, что пустые макросы являются законными в новом стандарте С++?
Это весь мой вопрос, но предвосхищая "зачем вы хотите?". ответ, вот пример. Мне нравится хранить файлы .h, незагроможденные органами функций, но внедрение простых аксессуаров за пределами файла .h утомительно. Поэтому я написал следующий макрос:
#define IMPLEMENT_ACCESSORS(TEMPLATE_DECL, RETURN_TYPE, CLASS, FUNCTION, MEMBER) \
TEMPLATE_DECL \
inline RETURN_TYPE* CLASS::Mutable##FUNCTION() { \
return &MEMBER; \
} \
\
TEMPLATE_DECL \
inline const RETURN_TYPE& CLASS::FUNCTION() const { \
return MEMBER; \
}
Вот как я буду использовать его для шаблона класса, содержащего int
, называемый int_
:
IMPLEMENT_ACCESSORS(template<typename T>, int, MyTemplate<T>, Int, int_)
Для класса, отличного от шаблона, мне не нужен template<typename T>
, поэтому я опускаю этот аргумент макроса:
IMPLEMENT_ACCESORS(, int, MyClass, Int, int_)