模板中的函数指针

5 c++ templates

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

typedef int (*get_max)();

template<get_max FUNC>
get_max func()
{
        return FUNC;
}
Run Code Online (Sandbox Code Playgroud)

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

gwi*_*rrr 1

全局函数具有已知大小的已知地址,因此它们可以在编译时表达式中使用,例如作为模板参数。在标准 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)