I try overload WriteLogs macro with 1 and 2 params:
template <typename... Args>
void WriteLog(const LogContext& logContext, const LogSettings& logSettings, std::string formatMsg, Args... args) {
// ...
printf("formatMsg", args...);
// ...
}
#define WriteLog_1(message, ...) WriteLog(LogContext{__LINE__, __FILE__, __FUNCTION__}, LogSettings{false, 0}, message, ##__VA_ARGS__)
#define WriteLog_2(settings, message, ...) WriteLog(LogContext{__LINE__, __FILE__, __FUNCTION__}, settings, message, ##__VA_ARGS__)
#define EXPAND(x) x
#define GET_MACRO(_1, _2, NAME, ...) NAME
#define WriteLogs(...) EXPAND(GET_MACRO(__VA_ARGS__, WriteDebug2, WriteDebug1)(__VA_ARGS__))
so is it possible to overload them for usage:
int main() {
WriteLogs("hello %s, %d + %d = %d", "world", 2, 2, 5); // WriteLog_1
WriteLogs(LogSettings{true, 0}, "hello %s, %d + %d = %d", "world", 2, 2, 5); // WriteLog_2
}