gpt4 book ai didi

c++ - 为标准 C++ 类型定义 NULL/Empty 值

转载 作者:行者123 更新时间:2023-11-28 00:38:06 26 4
gpt4 key购买 nike

我的类有返回 const <Container>& 的方法因为我不希望在外部修改返回的容器并且复制可能很昂贵。例如:const std::set<ClassA>& foo()我想要 foo()能够返回对空 std::set<ClassA> 的 const 引用如果必须的话。即

const std::set<ClassA>& foo(const std::string& key) {
std::map<std::string, std::set<ClassA>>::iterator itr = m_elements.find(key);
return (itr != m_elements.end()) ? *itr : /*empty std::set<ClassA>*/;
}

但我无法真正返回一个对临时构造的空 std::set<ClassA> 的 const 引用在 foo() .为了解决这个问题,我在一个常见的地方定义了一个通用模板单例类,以便它可以与任何类型一起使用

template <typename T> class cNull
{
public:
static const T& Value() {
static cNull<T> instance;
return instance.d;
}
private:
cNull() {};
cNull(const cNull<T>& src);
void operator=(cNull<T> const&);
T d;
};

所以现在foo()可以是这样的

const std::set<ClassA>& foo(const std::string& key) {
std::map<std::string, std::set<ClassA>>::iterator itr = m_elements.find(key);
return (itr != m_elements.end()) ? *itr : cNull<std::set<ClassA> >.Value();
}

我想知道的是,是否有更好的方法来解决这个问题,这个设计是否有任何问题?

最佳答案

What I was wondering is, if there's a better way to solve this problem and if there are any issues with this design?

当然有:不返回引用,而是返回拷贝。当您说“您希望能够返回一个空的 std::set<T>”时,您只是在说明您可能希望根据其原始状态(作为成员变量)更改返回的值。在这种情况下,拷贝完全没问题。

关于c++ - 为标准 C++ 类型定义 NULL/Empty 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148601/

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