我有这段代码,它返回编译时由
__PRETTY_FUNCTION__
宏提供的修改后的函数名称字符串:
template<size_t N>
struct SL
{
char value[N];
constexpr SL(const char (&str)[N])
{
for(size_t i = 0; i != N; ++i)
value[i] = str[i];
}
};
template<SL literal>
consteval auto PrettifyFunctionName()
{
...
}
我这样使用它:
constexpr auto resultName = PrettifyFunctionName<__PRETTY_FUNCTION__>();
我想将宏
__PRETTY_FUNCTION__
替换为 std::source_location::function_name()
我如何将它作为模板参数传递?constexpr
值吗?
添加一个从
const char*
复制到数组中的构造函数到 SL
,然后:
constexpr auto funcName = std::source_location::current().function_name();
constexpr auto resultName = PrettifyFunctionName<SL<mystrlen(funcName)+1>(funcName)>();
您需要自己定义
mystrlen
与 strlen
等效,因为 std::strlen
未标记为 constexpr
。