我正在写logger文件。我更喜欢在那里使用宏 __ FUNCTION __ 。我不喜欢这样的方式:
Logger.write("Message", __FUNCTION__);
也许,有可能做出类似的事情:
void write(const string &message, string functionName = __FUNCTION__)
{
// ...
}
如果没有,有没有办法做不到手的东西(我的意思是传递函数名称)?
答案 0 :(得分:4)
你可以通过将它全部包装在一个宏中来做类似的事情:
#define log(msg) Logger.write(msg, __FUNCTION__)
缺点是使用此宏时,您需要在范围内Logger
。
答案 1 :(得分:2)
宏只通过文本替换工作 - 预处理器将宏定义放在其名称的位置。你不能拥有像你建议的那样的“智能”宏。
在标准C ++中不支持您想要的内容。
答案 2 :(得分:1)
您最终可以在c ++ 20中没有宏魔术的情况下完成此操作:
void write(std::string_view message, const std::source_location& location =
std::source_location::current()) {
std::cout << "Message= " << message
<< ", Function=" << location.function_name();
}
int main() {
write("Hello world!");
}