什么是将lambda函数作为参数传递给仅使用(但不存储或转发)lambda函数的函数的最佳(即性能最佳,通用性最佳)方法?
选项1:通过const引用传递是否是正确的方法?
问题是:选项2是否比选项3有任何优势?
编辑#2:
选项4:另一种通过值获取lambda的版本已经被提出。 参见此处。
选项1:通过const引用传递是否是正确的方法?
template <typename F>
void just_invoke_func(const F& func) {
int i = 1;
func(i);
}
选项2:或者将其作为转发引用(通用引用)传递是否更好?
template <typename F>
void just_invoke_func(F&& func) {
int i = 1;
func(i);
}
后者是否比前者更有优势?
这两种解决方案中是否存在任何危险?
编辑 #1:
选项 3:正如Yakk - Adam Nevraumont所指出的,使用mutable
的lambda在选项一中将无法工作。因此,考虑使用一个接受非常量左值引用的另一个版本:
template <typename F>
void just_invoke_func(F& func) {
int i = 1;
func(i);
}
问题是:选项2是否比选项3有任何优势?
编辑#2:
选项4:另一种通过值获取lambda的版本已经被提出。 参见此处。
template <typename F>
void just_invoke_func(F func) {
int i = 1;
func(i);
}
func
作为右值引用传递的选项具有任何优势?我很难想出转发引用版本(第二个)相对于仅使用左值引用版本(第一个)的优势。 - j00hi