gpt4 book ai didi

c++ - 如何在编译时使用预处理器计算和存储哈希值?

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:16 32 4
gpt4 key购买 nike

我有一个 native C++ 程序,它使用“事件队列”在不同线程上执行函数。我在堆上分配了一个“事件”类,并将其放在我的线程队列之一中以供执行。

一切都很好,但很难追溯这些“事件”的起源。我希望每个“事件”都存储一些关于它来自哪里的信息。现在我为此使用内部 _ReturnAddress(),但我还想要文件名字符串和行号。我可以使用宏来安排我的“事件”。

当然,我不想为拥有这些字符串付出代价。

有没有什么方法可以让预处理器建立并转储文件的 map “id”=>“文件,行”,其中“id”将是每次我的宏扩展时递增的一些唯一数字?我可以将该 ID 存储为我的来源。

或者计算文件名的一个非常短的散列,以便我可以在运行时使用它?

欢迎提出任何想法。

最佳答案

对于 ID,您可以使用 __COUNTER__。

来自 http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx :

Expands to an integer starting with 0 and incrementing by 1 every time it is used in a compiland.

__FILE____LINE__ 可用于跟踪事件的分配位置。

但是为什么要追溯这些事件的源头呢?如果这是出于调试目的,您可能需要考虑在特殊 Debug模式下将使用 StackWalk64 收集的堆栈跟踪嵌入到您的类中 - 它会为您提供比原始位置更有用的信息。

关于c++ - 如何在编译时使用预处理器计算和存储哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/921367/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com