我的班级有返回的方法,const <Container>&
因为我不希望返回的容器在外部被修改,并且复制可能很昂贵。例如:如果必须的话const std::set<ClassA>& foo()
,我希望foo()
能够返回对空的 const 引用std::set<ClassA>
。IE
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>
in的 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();
}
我想知道的是,是否有更好的方法来解决这个问题,以及这个设计是否有任何问题?