我正在使用一个返回int错误代码的API,我决定建立一个包装器错误类:
class Error
{
...
public:
Error(int ErrC, const char* UserMessage, const char* FileName, int LineNumber, const char* Function);
char * GetFunction();
...
}
我决定尝试进入宏世界,并创建一个宏来为我实例化该类:
#define API_ERROR(Code,MSG) API::Error(Code,MSG,__FILE__,__LINE__,__FUNCSIG__)
然后我定义了一个由main调用的Test函数
void TestFunc()
{
API::Error Error = API_ERROR(0,"Hello");
std::cout << Error.GetFunction();
}
使用编译器选项输出后期预处理结果(属性-> C / C ++->预处理器->预处理到文件)
void TestFunc()
{
API::Error Error = API::Error(o,"Hello","...\\main.cpp",30,);
std::cout << Error.GetFunction();
}
我认为这不起作用,因为__FUNCSIG__
仅在函数内部定义。我也尝试过
#define EMPTY()
#define DEFER(...) __VA_ARGS__ EMPTY()
#define API_ERROR(Code,MSG) API::Error(Code,MSG,__FILE__,__LINE__,DEFER(__FUNCSIG__))
但是我想我误解了该帖子的作者。
有没有办法使这项工作有效?
我正在将Visual Studio 2019社区与默认的MSVC ++编译器一起使用。