gpt4 book ai didi

c++ - 当 CustomClass 是抽象基类时,返回 std::pair 用于搜索函数中的失败情况

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

我有以下一段代码可以搜索 std::map<int, const CustomClass&> 类型的 map .如果在 map 中找不到该项目,我想返回一个“失败”案例对象。

我在 Returning a “NULL reference” in C++? 中进行了讨论

Using std::pair with a bool to indicate if the item is valid or not (note: requires that SomeResource has an appropriate default constructor and is not expensive to construct):

std::pair<SomeResource, bool> SomeClass::getSomething(std::string name) {
std::map<std::string, SomeResource>::iterator it = content_.find(name);
if (it != content_.end())
return std::make_pair(*it, true);
return std::make_pair(SomeResource(), false);

}

但是由于我的 CustomClass 是一个抽象基类,所以我无法实例化它!

有没有更好的方法来规避这个问题?我想象返回一个指向类对象的指针可能允许它是可变的。我想保持返回的对象不可变。

我的代码示例如下所示 -

std::pair<const NpBaseTest::NpBaseTest&, bool> NpTestMgr::find(const UID& p_uid) const
{
auto search = m_pending.find(p_uid);
if(search != m_pending.end())
return std::make_pair(*search, true);
return std::make_pair(NpBaseTest(), false);
}

最佳答案

你应该做 C++17 std::optional 正在做的事情。它不需要任何特殊的编译器支持,因此您可以简单地从任何支持它的库中借用实现。例如,CLang 版本的 libc++ 通常易于阅读。

您很可能不想做的一件事是返回指针。这不是可变性的问题,而是动态内存管理。

关于c++ - 当 CustomClass 是抽象基类时,返回 std::pair<const CustomClass &, bool> 用于搜索函数中的失败情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41988226/

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