gpt4 book ai didi

c++ - 模板中的函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:23 25 4
gpt4 key购买 nike

在旧代码中,我看到模板中使用了函数指针:

typedef int (*get_max)();

template<get_max FUNC>
get_max func()
{
return FUNC;
}

由于我是模板的新手,所以我迷路了,并试图在谷歌上搜索更多相同的理论,这是如何可能的。描述这本书的任何链接?提前致谢

最佳答案

全局函数具有已知大小的已知地址,因此它们可以用于编译时表达式,例如作为模板参数。在标准的 x86 平台上,地址有 32 位,在 x64 - 64 位上(这就是为什么你不应该使用 int 来存储它,它在两个平台上都有 32 位,而是 intptr_t)。

所以代码所做的是返回一个指针,该指针指向 func 函数专门用于的函数。在内部,它只是返回传递函数的地址。可能让您感到困惑的是函数名称会退化为函数指针(即您不必使用 & 来获取函数的地址)

如果您遇到这种情况,您还可以创建一个模板,其参数是一个全局非静态变量的地址。它有助于理解您的原始示例中发生了什么。

#include <iostream>
#include <string>

template<int* p>
int* useless_proxy()
{
return p;
}

int foo = 666;

int main()
{
std::cout << *useless_proxy<&foo>() << std::endl; // prints 666
};

关于c++ - 模板中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22559730/

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