我打开了this关于转发引用的帖子,这是一个(希望如此)MCVE 代码:
#include <functional>
#include <vector>
using namespace std;
struct MultiMemoizator {
template <typename ReturnType, typename... Args>
ReturnType callFunction(std::function<ReturnType(Args...)> memFunc, Args&&... args) {
}
};
typedef vector<double> vecD;
vecD sort_vec (const vecD& vec) {
return vec;
}
int main()
{
vecD vec;
std::function<vecD(const vecD&)> sortFunc(sort_vec);
MultiMemoizator mem;
mem.callFunction<vecD, vecD>(sortFunc, vec);
}
由于这不是全部代码,也许我必须根据答案添加额外的代码。
无论如何,正如this中所建议的那样回答,此版本无法转发引用,因为未推导Args
。
所以我的问题是:是否可以使此代码“转发可引用”?
最佳答案
为了完美转发您的论点,您需要推导类型。您可以通过分别推导函数的参数和仿函数的参数来做到这一点:
template <typename ReturnType, typename... FunArgs, typename... Args>
ReturnType callFunction(std::function<ReturnType(FunArgs...)> memFunc,
Args&&... args)
{
//...
}
然后你可以在没有模板参数的情况下调用 callFunction
并推导出所有内容:
mem.callFunction(sortFunc, vec);
关于c++ - 制作代码 "forwarding referencable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843699/