C ++ 20 std::source_location
ในที่สุด C ++ ได้เพิ่มตัวเลือกที่ไม่ใช่มาโครและอาจมีอิทธิพลเหนือบางจุดในอนาคตเมื่อ C ++ 20 กลายเป็นวงกว้าง:
เอกสารบอกว่า:
constexpr const ถ่าน * function_name () const noexcept;
6 คืน: ถ้าวัตถุนี้แสดงถึงตำแหน่งในเนื้อความของฟังก์ชันส่งคืน NTBS ที่กำหนดใช้งานที่ควรสอดคล้องกับชื่อฟังก์ชัน มิฉะนั้นส่งคืนสตริงว่าง
โดยที่ NTBS หมายถึง "Null Terminated Byte String"
ฉันจะลองดูเมื่อการสนับสนุนมาถึง GCC GCC 9.1.0 โดยที่g++-9 -std=c++2a
ยังไม่รองรับ
https://en.cppreference.com/w/cpp/utility/source_locationการใช้สิทธิ์จะเป็นดังนี้:
#include <iostream>
#include <string_view>
#include <source_location>
void log(std::string_view message,
const std::source_location& location std::source_location::current()
) {
std::cout << "info:"
<< location.file_name() << ":"
<< location.line() << ":"
<< location.function_name() << " "
<< message << '\n';
}
int main() {
log("Hello world!");
}
เอาต์พุตที่เป็นไปได้:
info:main.cpp:16:main Hello world!
__PRETTY_FUNCTION__
VS __FUNCTION__
VS __func__
VSstd::source_location::function_name
ตอบแล้วเมื่อ: __PRETTY_FUNCTION__, __FUNCTION__, __func__ แตกต่างกันอย่างไร