在旧代码中,我看到函数指针在模板中使用:
typedef int (*get_max)();
template<get_max FUNC>
get_max func()
{
return FUNC;
}
由于我是模板的新手,我迷失了,并试图谷歌更多相同的理论如何可能。这个描述的书的任何链接?提前致谢
答案 0 :(得分:1)
全局函数已知已知大小的地址,因此它们可用于编译时表达式,例如,作为模板参数。在标准x86平台上,地址有32位,在x64 - 64位(这就是存储它的原因,你不应该使用int
,它在两个平台上都有32位,而是intptr_t
。 / p>
所以代码正在做的是返回指向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
};