在宏中使用__FUNCSIG__将其扩展为空

问题描述 投票:0回答:1

我正在使用一个返回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 ++编译器一起使用。

c++ visual-c++ macros
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.