【发布时间】:2017-12-04 04:48:42
【问题描述】:
假设我们有如下函数:
void blax(T t) {
for {...
//Stuff
auto variable = generator(previous_internal_value);
//Stuff
}
}
在函数的深处还有另一个名为“生成器”的函数。函数“blax”可以很容易地修改为实现另一个角色,让我们将此函数称为“blax2”。
两者在实现上的唯一区别是'balx2'使用了函数generator2:
void blax2(T t) {
for {...
//Stuff
auto variable = generator2(previous_internal_value);
//Stuff
}
}
我希望有一个通用的方式来编写这两个函数。我想出的是这样的:
void generic_blax(T t, std::function<int(int)> generator_impl) {
for {...
//Stuff
auto variable = generator_impl(previous_internal_value);
//Stuff
}
}
void blax(T t) {
return generic_blax(t, generator)
}
void blax2(T t) {
return generic_blax(t, generator2)
}
这个实现很好,但我不确定上述代码的效率。所以我的问题三折:
有没有办法通过宏来完成这个函数“注入”,这样我就不必在运行时对 nr 个函数和 nr 个函数调用产生惩罚?
如果不是,使用 std::function 代替函数指针是否会导致性能损失?
并且,尝试使用 inline 关键字强制内联“generic_blax”以获得更接近如果 blax 和 blax2 具有“正常”函数体时的性能是否明智?或者如果函数太大,将在 'blax_generic' 之前放置 inline 而不是内联函数(即使这只需要在两个地方发生)?
【问题讨论】:
标签: c++ functional-programming macros metaprogramming c++17