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或其他语言怎么样?