Препроцессор не может разделять токены. Это означает, что невозможно произвести foo
из m_foo
или (как недавно было сказано) foo
из "foo"
.
Если вы можете использовать переменные макросы (как указывает Мэтью М., это означает C99 или C ++ 0x), здесь будет полезна библиотека P99 Дженса Гастта. Существуют макросы, которые делают это еще проще, но давайте сделаем это удобочитаемым для людей, которые не знакомы с библиотекой, хорошо?
Упрощенный случай: передано два или три аргумента.
#define MANIP2(a, b) \
f(a, b) \
g(#a, #b)
#define MANIP3(a, b, c) \
f(a, b, c) \
g(#a, #b, #c)
#define MANIP(...) \
MANIP_( \
P99_PASTE2(MANIP, P99_NARG(__VA_ARGS__)), \
__VA_ARGS__) \
#define MANIP_(MANIPMAC, ...) MANIPMAC(__VA_ARGS__)
Это иллюстрирует основной принцип. На практике есть макросы в стиле foreach (аналог Boost), которые упрощают кодирование (хотя, как я уже говорил, труднее читать для непосвященных). Подробнее см. Документацию библиотеки P99 .