У меня есть некоторый код, который по существу конденсируется доПереходя шаблон, который требует запятые для одного-аргумента макрокоманды
#define FOO(a)
FOO(std::map<int, int>);
Но он испускает ошибку компиляции (слишком много фактических параметров для макроса FOO
).
Очевидно, препроцессор думает, что я поставил std::map<int
и int>
в качестве аргументов.
Есть ли способ обойти это? Таким образом препроцессор не обрабатывает цитированную строку запятой.
One простой способ - определить макрос, который разрешает запятую. Другое решение, когда это подходит, состоит в том, чтобы передать имя шаблона и аргументы шаблона отдельно. Тем не менее, я помню, что у Йоханнеса Шауба был аккуратный трюк для этого, который был более общим. Теперь я просто отжимаю свой мозг, чтобы попытаться запомнить его. Пока не повезло ... :( –
Босс говорит, что я должен просто охладиться и использовать typedef. Но это довольно скучно. –
Как насчет [BOOST_PP_COMMA] (http://stackoverflow.com/a/24793828/1708801) –