回答的同时这个问题 https://stackoverflow.com/q/25392935/3821804我写了这个working代码,包装在模板参数中传递的函数:
template<typename Fn, Fn fn, typename... Args>
auto wrapper(Args... args)->decltype(fn(args...)){
return fn(args...);
}
#define WRAPPER(FUNC) wrapper<decltype(&FUNC), &FUNC>
使用示例(我使用此代码进行测试):
int min(int a, int b){
return (a<b)?a:b;
}
#include<iostream>
using std::cout;
int main(){
cout<<WRAPPER(min)(10, 20)<<'\n';
}
有两个人告诉我使用完美转发。当我问如何做到这一点时,其中一个人重定向了我here https://stackoverflow.com/questions/3582001/advantages-of-using-forward。我阅读了问题,仔细阅读了最佳答案,并更改了wrapper
to:
#include<utility>
template<typename Fn, Fn fn, typename... Args>
auto wrapper(Args&&... args)->decltype(fn(std::forward<Args...>(args...))){
return fn(std::forward<Args...>(args...));
}
它会编译,除非我尝试使用上面的示例代码来检查它。我该如何修复代码?
http://rextester.com/YUIYI99787 http://rextester.com/YUIYI99787