私たちのC/C++プロジェクトでは、SWIG内のすべての関数を自由にラップしてPythonスクリプトを利用できる新しい内部スクリプトを使用しています。 SWIGは可変的な関数をうまく包むことができないので、私たちのロガー関数を窒息させます。可変ではないprintf形式のロガー
だから私は、下記の簡略化した例に示す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);
}
この大丈夫ですか?この問題の解決策はありますか?ありがとう。
C/C++のようなものはなく、どちらもvariadicマクロに関して本当に異なっています。あなたのコードはC++ですが、あなたはCであなたの質問にタグを付けています。一つを選択するか、あなたが探しているものをより良く説明してください。 –