Я нашел страницу, на которой объясняется, как можно реализовать сравнение идентификатора и маркера с помощью директив препроцессора c. Это можно сделать с помощью некоторых макросов, например:
#define COMPARE_foo(x) x
#define COMPARE_bar(x) x
#define PRIMITIVE_COMPARE(x, y) IS_PAREN \
( \
COMPARE_ ## x ( COMPARE_ ## y) (()) \
)
PRIMITIVE_COMPARE(foo, bar) // expands to 0
PRIMITIVE_COMPARE(bar, bar) // expands to 1
Какой IS_PAREN
проверяет, полностью ли он расширен или нет (что происходит только тогда, когда два макроса различаются из-за окрашивание в синий цвет).
Сейчас ищу аналогичную команду в Boost Preprocessor. Я хочу иметь список допустимых типов макроса, и если макрос вызывается с одним из этого типа, он расширяется до того, что он должен, иначе он ничего не делает. Мой псевдокод выглядит примерно так:
#define ACCEPTED_TYPE (float)(int)(string)
#define Macro(x) // If one of accepted type do a otherwise do nothing
Если препроцессор boost не имеет точного решения, как вы предлагаете упростить реализацию.
ACCEPTED_TYPE
легко варьировался, и вы используете достаточно современный компилятор и Boost 1.60 (это много если), это может сработать, но если ваш вариант использования похож на то, что я сделал здесь, есть лучший подход, использующий специализации шаблонов. - person llonesmiz   schedule 31.01.2016