gpt4 book ai didi

c++ - 制作代码 "forwarding referencable"

转载 作者:行者123 更新时间:2023-11-30 03:42:23 26 4
gpt4 key购买 nike

我打开了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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com