gpt4 book ai didi

c++ - 无序映射 emplace 返回的对的类型

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:05 26 4
gpt4 key购买 nike

我有一个函数在标准无序映射容器上调用 emplace() 方法,我需要返回 emplace() 给出的准确返回值称呼。我知道它返回一个 std::pair 的迭代器(无论是新的还是旧的取决于成功的操作)和一个代表成功的 bool 值。早些时候我只返回 bool 部分,如下所示:

auto result = map.emplace(std::make_pair(id, someObj));
return result.second;

而且我知道返回类型是 bool。但是现在我需要返回原始的 result 变量但我不知道它的类型所以我应该在它的类的函数原型(prototype)中放什么?

我尝试在迭代器上使用 typeid 方法,但它给出了:

St4pairINSt8__detail14_Node_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ELb0ELb1EEEbE

作为输出。

最佳答案

您可以使用 C++11 的尾随返回类型和 decltype 来完成此操作。这样做我们会有一个像

这样的功能
auto some_function(some_parameters) -> decltype(map.emplace(id, someObj))
{
return map.emplace(id, someObj);
}

现在编译器将推断返回类型正是 emplace 调用的返回类型。

如果您可以使用 C++14 或更新版本,那么您可以使用自动返回类型推导并将代码简化为

auto some_function(some_parameters)
{
return map.emplace(id, someObj);
}

在这里,编译器会将函数的返回类型推断为通过 return 语句从函数返回的类型。请注意,您不能以这种方式在函数体中返回不同的类型,因为编译器无法推断出要使用哪种类型。


请注意,在上面的示例中,我没有将 std::make_pairemplace 一起使用。与 insert 不同,它需要一个 pair,您可以直接在 emplace 中构建。

关于c++ - 无序映射 emplace 返回的对的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39983488/

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