模板中的函数指针

时间:2014-03-21 13:09:24

标签: c++ templates

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

typedef int (*get_max)();

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

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

1 个答案:

答案 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
};