std::experimental::source_location
的合理符合版本可以使用__builtin_FILE()
,__builtin_LINE()
等在gcc中实现。在Visual Studio 2017中是否存在类似的内在函数?或者有没有办法在Visual Studio 2017中实现std::experimental::source_location
?
答案 0 :(得分:2)
不幸的是,目前无法仅通过编译器正确实现source_location,因此您必须使用预处理器和宏,如__FILE__
,__LINE__
和__FUNCTION__
将位置信息提供给存储它们的数据结构(你称之为source_location)。
话虽如此,我确实分享了你的痛苦。
我最近开发了一个小型库,它将位置数据和其他一些信息添加到抛出的异常中,在那里我不得不最终得到一个丑陋的宏,如MY_THROW(Exception(args))
,它基本上只是提供获得的值从前面提到的宏到抛出异常的函数。尽管看起来非常糟糕,但它似乎是迄今为止唯一的工作选择。