В рамках ограничений, основанных на типах верхнего уровня, которые VMD может анализировать, библиотеки дают конечному пользователю возможность проектировать макросы с динамическими типами данных. Под этим я имею в виду, что макрос может быть разработан для обработки различных типов данных на основе какого-то документально подтвержденного соглашения различных комбинаций макровхода, означающего несколько разные вещи. Добавьте к этому возможность конструировать такие макросы с вариадными параметрами, и у нас есть препроцессорная система макросотворения, которая в меньшей степени конкурирует с DSELS шаблонного метапрограммирования. Конечно, препроцессор не так гибок, как шаблоны C++, но все же тип метапрограммирования препроцессора, который можно сделать с VMD, и лежащий в основе Boost PP, в создании гибких макросов, которые могут обрабатывать различные комбинации типов данных, очень интересен.
Конечно, макросы должны использоваться конечным пользователем, поэтому синтаксическая способность последовательностей представлять различные типы входных данных должна быть сбалансирована с простотой использования и пониманием при использовании макроса. Но поскольку определенные последовательности могут имитировать вызовы функций C++, можно представить макросы как язык, близкий к C++ с VMD.
Что важно при разработке макроса, в котором вы анализируете ввод, чтобы решить, какой тип данных инвокер передает вашему макросу, так это то, что вы знаете о ограничениях при анализе типа данных. В качестве примера, если вы разрабатываете макрос, где некоторый вход может быть либо номером, идентификатором, либо некоторым другим входом верхнего уровня типа данных, то попытка проанализировать данные, чтобы увидеть, может ли это номер или идентификатор потерпеть неудачу с ошибкой препроцессора и аннулировать ваш дизайн, если данные не являются типом данных VMD. Таким образом, разработка макроса с учетом типов данных часто означает ограничение данных на типы верхнего уровня.