我不想要函数指针开销,我只想要具有相同签名的两个不同函数的相同代码:
void f(int x);
void g(int x);
...
template<typename F>
void do_work()
{
int v = calculate();
F(v);
}
...
do_work<f>();
do_work<g>();
这可能吗?
为了消除可能的混淆:“模板参数”是指模板 的参数/参数, 而 不是 类型为 templated 的函数参数。
原文由 Martin Ba 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种极有可能生成直接函数调用的方法是使用静态成员函数,因为它没有给编译器选项:
没有函数指针,没有临时变量,也没有不必要
this
。当然,我什么都不保证,但是即使禁用了优化,生成的代码也应该是合理的。