«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу смоделировать необязательные параметры в макросах C++?

Как я могу смоделировать необязательные параметры в макросах C++?

Опубликовано 15 ноября 2024 г.
Просматривать:424

How Can I Simulate Optional Parameters in C   Macros?

Макросы с переменными параметрами в C

Необязательные параметры предлагают удобный способ указания параметров, имеющих значения по умолчанию, обеспечивая гибкость при вызове функций. Хотя C изначально не поддерживает необязательные параметры в макросах, существуют методы, которые могут имитировать такое поведение.

Один из подходов предполагает использование рекурсивного шаблона макроса. Давайте рассмотрим пример:

#define PRINT_STRING(message, ...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

#define PRINT_STRING_1_ARGS(message) PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size) PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)

Макрос PRINT_STRING принимает переменное количество аргументов. Макрос PRINT_STRING_MACRO_CHOOSER использует список аргументов дважды: один раз для определения правильного вспомогательного макроса (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS или PRINT_STRING_3_ARGS) на основе количества аргументов и еще раз для передачи аргументов выбранному вспомогательному макросу.

Вот как использовать it:

PRINT_STRING("Hello, World!");  // Defaults to no size or style
PRINT_STRING("Hello, World!", 18); // Specifies only size
PRINT_STRING("Hello, World!", 18, bold); // Specifies both size and style

Этот подход предоставляет дополнительные параметры в макросах, позволяя вызывающему объекту указывать только те параметры, которые ему нужны. Однако для этого требуется определить несколько вспомогательных макросов, которые могут стать многословными для большего количества дополнительных параметров.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3