c ++中的函数地址文字在哪里?

aca*_*bot 6 c++ generics assembly templates

更新:经过一些额外的阅读后,我真正想要的是保证早期绑定(这应该转换为立即调用非虚函数和非PIC代码),这可以通过将(成员)函数作为模板参数传递来完成.我遇到的问题是gcc <4.5和icc 11.1可以为成员函数指针模板参数调用生成一些时髦的指令.AFAICT,gcc> = 4,5和vs2008处理这些模板参数调用很好.

首先,也许文字不是这个概念的正确术语,但它是我能想到的最接近的(不是作为一等公民的功能意义上的文字).

这个想法是,当你进行传统的函数调用时,它会编译成这样的东西:

callq <immediate address>
Run Code Online (Sandbox Code Playgroud)

但是如果使用函数指针进行函数调用,它将编译为如下所示:

mov    <memory location>,%rax
callq  *%rax
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但是,如果我正在编写一个需要使用指定参数列表进行某种回调的模板库,并且该库的用户应该知道他们想要在编译时调用哪个函数呢?然后我想编写我的模板来接受函数文字作为模板参数.所以,类似于

template <int int_literal> 
struct my_template {...};` 
Run Code Online (Sandbox Code Playgroud)

我想写

template <func_literal_t func_literal>
struct my_template {...};
Run Code Online (Sandbox Code Playgroud)

并在my_template编译中调用func_literal callq <immediate address>.

C++中是否有这样的设施,或者是为了达到同样的效果?如果没有,为什么不(例如一些灾难性的副作用)?C++ 0x或其他语言怎么样?

Chr*_*odd 3

如果您在模板中使用函数指针类型并使用固定函数实例化它,则编译器应该对该函数指针调用使用直接调用。