提问人:Michael 提问时间:1/22/2022 更新时间:1/22/2022 访问量:117
用户定义的编译时格式化消息
User defined compile time formatted message
问:
这与这个问题有关,该问题解释了如何在编译时打印文本字符串。
我想在 和 中输出格式化的消息。像这样的东西:gcc
nvcc
compile_time_printf( "Calling with value %d\n", TemplateParameterValue );
TemplateCall< TemplateParameterValue > ();
以便该值在编译时显示在 gcc/nvcc stdout 中。
这可能吗?
答:
1赞
Ryan McCullough
1/22/2022
#1
这不是一个答案,但不幸的是,我没有足够的声誉来发表评论。
我只是在这里做了一个有根据的猜测(目前仍在学习很多东西),但我相信使用可变参数模板函数和 constexpr/consteval 说明符是可能的。如果我理解正确的话,your 必须是一个 constexpr 值,而 your 可以是一个生成 constexpr 值的 consteval 函数。然后,您可以将此 constexpr 值传递到您的函数中,并让它也使用 consteval 说明符执行您想要的操作,因为无论如何,它在此上下文中都是一个即时函数。TemplateParameterValue
TemplateCall<TemplateParameterValue> ()
compile_time_printf()
我之前在某处读到编译时模板讨厌字符串文字(我不知道这是否发生了变化),但我确信您可以使用模板来解决这个问题,因为我个人已经在当前项目中这样做了,并且还没有遇到任何问题。唯一的问题是,我不相信 printf() 支持 constexpr,所以你必须滚动自己的编译时解析器等。std::string_view
这只是假设您正在尝试验证有效的输入,如果不是,则在编译时发出警告。同样,这只是我此时此刻能给出的最好的见解——希望有更多经验的人能给你一个更正确的答案,祝你好运!=D
评论