Наш проект на C / C ++ использует новый внутренний скрипт, который свободно оборачивает каждую функцию в SWIG, чтобы сделать ее доступной для скриптов python. Он заглушает нашу функцию регистрации, поскольку SWIG не может хорошо оборачивать переменные функции.
Поэтому я решил спрятать функции макроса в макросе, который SWIG никогда не отключит, как показано в упрощенном примере ниже:
#include <iostream>
void LogPrint(char *file, int line, char* msg)
{
std::cout << file << ":" << line;
std::cout << " [ " << msg << " ] ";
std::cout << std::endl;
}
#define MAX_LOG 256
#define LogPrintf(msg, args...) \
{ \
char *msg_buffer = new char[MAX_LOG]; \
snprintf(msg_buffer, MAX_LOG, msg, ##args); \
Log(__FILE__, __LINE__, msg_buffer); \
delete [] msg_buffer; \
}
main()
{
LogPrintf("%s = %f", "tau", 6.28318);
LogPrintf("%s = %f", "pi", 3.14159);
}
Это хорошо? Есть ли лучшие решения этой проблемы? Спасибо.