我有一个功能,让我们说
void processSomething(Arg1 arg1, Function t){
...
t(someVariable);
}
我希望以下两种用法都有效:
processSomething(myArg1, [&](SomeVariable someVar){...});
void(*myFunc)(void) = &someFunc;
processSomething(myArg1, myFunc);
但是,我发现在使用void(*myFunc)(void)
作为参数声明时我不能使用lambda-way。
没有两个单独的函数或过于复杂的包装器使用这两种用法的方法吗?
答案 0 :(得分:6)
嗯,你有两个选择:
模板:
template<class F>
void processSomething(Arg1 arg1, F t){
这是首选方法,因为它可以创建更高效的代码,但代价是可能的代码重复。
使用std::function
或类似内容:
void processSomething(Arg1 arg1, std::function<void(SomeVariable)> t){
所涉及的间接费用的运行成本,但在每种情况下都会使用相同的代码。