gpt4 book ai didi

C++:将 __file__ 映射到预定义数字

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:41 25 4
gpt4 key购买 nike

这对我来说似乎是不可能的,但是 StackOverflow 已经解决了以前对我来说似乎不可能的事情,所以这里是:

我在文件名和 id 之间有一个预定义的映射,如果可能的话,我希望能够在编译时将 __FILE__ 映射到它的 id。

对不起,我的解释很拙劣,我希望一个例子对你有帮助:

编译过程开始前通过一些脚本生成的ids:

#define _FILE_IDS_MAIN_CPP 1
#define _FILE_IDS_HELPER_CPP 2
#define _FILE_IDS_HELPER_HPP 3

在代码中我希望能够做这样的事情:

printf("%d", GET_FILEID_MACRO(__file__));

最佳答案

首先,您可以使用自 C++11 起可用的 constexpr 函数对文件名字符执行一些计算。例如,如果您只是让字符串长度成为您的 ID,您可以:

template <unsigned int N>
constexpr unsigned int FileID(char const (&a)[N])
{
// your computation goes here
return N;
}

#include <iostream>
template <unsigned int N> void print()
{
std::cout << "Static value: " << N << "\n";
}

int main()
{
print<FileID(__FILE__)>();
}

包含print 模板作为在编译时计算数字的证据。

以此为起点,您可以将 FileID 更改为某种哈希函数,或者可能更改为静态 map 查找 - 这当然是可能的,尽管可能相当冗长。不过,我敢肯定有人已经这样做了。

关于C++:将 __file__ 映射到预定义数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21159100/

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