从外部库接收参数:
candidate function not viable: no known conversion from 'std::unordered_map<string, string>' to 'std::unordered_map<string, string> &&' (aka 'unordered_map<basic_string<char>, basic_string<char> > &&') for 1st argument
void someMethod(shared_ptr<Context> ctx, std::unordered_map<string, string>&& config) {
ctx->setConfigOverrides(config);
}
// From Context :
// I can't change following method :
void setConfigOverrides(
std::unordered_map<string, string>&& configOverrides) {
setConfigOverrides(make_shared<const MemConfig>(move(configOverrides)));
}
最佳答案
您缺少将输入参数移至下一个相同的接收者的功能。这个:
ctx->setConfigOverrides(config);
应该是这样的:
ctx->setConfigOverrides(std:move(config));
正确的转发需要它。仅仅因为
config
是作为rval-reference传入的,并不意味着它在幕后并不具体。关于cppreference的出色文章很好地解释了这个概念(不足为奇;该站点确实很棒,如果尚未添加书签,则应添加书签)。而且,如果您认为语法很复杂,则通过模板推导进行完美转发会变得更糟。谢谢,std::forward<>
在那里完成了所有繁重的工作。无论如何,那是缺少的东西。希望能帮助到你。
关于c++ - 左值到右值的无序映射转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61029610/