考虑我写的这个简短的程序:
#include <iostream>
template<bool Debug = false>
constexpr int add(const int& a, const int& b) {
if (Debug)
std::cout << __FUNCTION__ << " called on line " << __LINE__ << '\n';
return (a + b);
}
int main() {
std::cout << add(3, 7) << '\n';
std::cout << add<true>(5, 9) << '\n';
return 0;
}
这很好用,而且它给出了正确的输出:
10
add called on line 6
14
然而,我希望打印的行号是程序调用点的行号,在这个程序中应该是第12行。那么我如何使用 "__LINE__" 或其他方法来给我从函数被调用的地方获取行号呢?期望输出结果为:
10
add called on line 12
14
如果可能的话,我希望它是从功能本身生成的。
-编辑-
作为对读者的说明,我对所有选项都持开放态度,但由于我的当前构建环境和使用Visual Studio,我仅限于C++17。
__LINE__
,否则你将得到不正确的行信息,例如 add<true, __LINE__>(5, 9)。使用 source_location,这不是问题。你只需将其用作函数参数,它将打印调用该函数的行的信息。 - Waqar