принимает макро-ввод как ds
литерал.
Да, этого и следовало ожидать. Макросы препроцессора раскрываются во время компиляции. Аргументами для функционально-подобных макросов являются буквальные токены исходного кода, которые появляются в скобках при вызове макроса. Они не имеют никакого дополнительного значения для препроцессора.
Кто-нибудь знает, как это сделать? Случай использования состоит в том, что есть несколько функций printXX (), которые должны вызываться на основе значения, переданного в макросе.
Опять же, макросы расширяются до исходного кода (приблизительно) во время компиляции. Процесс не учитывает и не может принимать во внимание семантику времени выполнения C ++, такую как преобразование идентификаторов переменных в соответствующие значения.
Если динамическая диспетчеризация c во время выполнения - это то, что вам нужно, тогда вам нужно совершенно другой механизм. Например, вы можете использовать обычные условные операторы для выбора между различными вызовами функций. Если вы хотите быть еще более динамичным c, вы можете подготовить таблицу поиска указателей функций и использовать ее для выбора и вызова соответствующих функций.
В комментариях вы добавили
У меня есть несколько методов queryServers
, queryNodes
, queryTargets
, которые я хочу вызвать, используя описанный выше трюк.
Возможно, вы сможете sh выполнить нечто похожее на то, что Вы спрашиваете через шаблоны или перегруженные функции. Эти механизмы также работают во время компиляции, поэтому у них нет доступа к информации времени выполнения, такой как значения переменных, но они знают о типах данных C ++ и полагаются на них.
В качестве альтернативы, возможно, вы ищете Шаблон стратегии .