gpt4 book ai didi

C++ 对现有或新变量的条件引用

转载 作者:行者123 更新时间:2023-11-30 02:15:50 25 4
gpt4 key购买 nike

我有一个函数可以通过 const 引用转发一些大变量,如下所示:

void processMore(const std::vector<int> &a, const std::vector<int> &b);

void process(const std::vector<int> &a,
const std::vector<int> &b) {
processMore(a, b);
}

但是我添加了修改它们的优化:

std::pair<std::vector<int>, std::vector<int>>
optimise(const std::vector<int> &a, const std::vector<int> &b);

我可以无条件地这样做:

void process(const std::vector<int> &a,
const std::vector<int> &b) {
auto opt = optimise(a, b);
processMore(opt.first, opt.second);
}

但我想让它成为可选的。我的解决方案是这样的:

void process(const std::vector<int> &a,
const std::vector<int> &b,
bool doOptimisation) {
auto opt =
[&]() -> std::pair<const std::vector<int>&,
const std::vector<int>&> {
if (doOptimisation) {
auto o = optimise(a, b);
return std::make_pair(o.first, o.second);
}
return std::make_pair(a, b);
}();
processMore(opt.first, opt.second);
}

这似乎有点令人费解。有没有更好的办法?我想避免不必要的复制。

最佳答案

“天真的”解决方案是这样的

if (doOptimisation)
{
auto o = optimise(a, b);
processMore(o.first, o.second);
}
else
{
processMore(a, b);
}

没有进行额外的复制。

关于C++ 对现有或新变量的条件引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55705049/

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