【发布时间】:2016-02-11 20:30:22
【问题描述】:
我想知道使用完美转发函子的正确方法是什么?这是两个代码sn-p。哪一个是最好的,如果都不是,最好的形式是什么?
template<typename T, typename... Args>
void callMe(T&& func, Args&&... args) {
func(std::forward<Args>(args)...);
}
或者
template<typename T, typename... Args>
void callMe(T&& func, Args&&... args) {
std::forward<T>(func)(std::forward<Args>(args)...);
}
编辑:
它会影响重载解决方案吗?如果func 的operator() 具有&& 或const & 的引用限定符,我应该使用后一个版本吗?我应该关心我调用哪个重载吗?
谢谢!
【问题讨论】:
-
如果函数调用运算符可能有引用限定符,则后者是正确的
-
@PiotrSkotnicki,你能举例说明你的意思吗?
-
@JohanLundberg coliru.stacked-crooked.com/a/2114bc29d189fde9
-
感谢您指出这一点。编辑了我的问题。
标签: c++ templates functor perfect-forwarding