在旧代码中,我看到函数指针在模板中使用:
typedef int (*get_max)();
template<get_max FUNC>
get_max func()
{
return FUNC;
}
Run Code Online (Sandbox Code Playgroud)
由于我是模板的新手,我迷失了,并试图谷歌更多相同的理论如何这是可能的.这个描述的书的任何链接?提前致谢
全局函数具有已知大小的已知地址,因此它们可以在编译时表达式中使用,例如作为模板参数。在标准 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
};
Run Code Online (Sandbox Code Playgroud)