我必须创建一个模板函数来搜索map变量中的元素。如果元素存在,则函数必须返回它。否则它必须返回NULL。
template <class K, class E> E dictionary<K,E>::research(K key) {
// map<K,E> elements;
if(elements.find(key) != elements.end()) {
return elements.find(key)->second;
} else {
return NULL;
}
由于返回类型是E,返回NULL总是给出错误。我怎样才能做到这一点?或者我必须以不同的方式构建我的功能?
这是学校的家庭作业,我必须返回NULL,没有其他选择。如果可以,我会亲自做些不同的事。
答案 0 :(得分:7)
此功能的设计不正确。 NULL
完全可能与类型E
完全不兼容。例如,假设E
是结构,或std::string
等等。
这是学校的家庭作业,我必须返回
NULL
,没有其他选择。
您的家庭作业不正确,或者您误解了其要求。您可能需要返回指向E
?
答案 1 :(得分:0)
您可以考虑返回类似boost :: optional的内容,即设置为包含有效对象或处于无效状态的类型,而不是返回指针。它以某种方式模仿指针,但更明确
以下只是为了说明原理,实施可以肯定进行优化。
template<typename T> class Optional {
public:
Optional(E e):
isValid(true),
mValue(e)
{}
Optional(): isValid(false), mValue() {}
bool isDefined() const {return isValid;}
E getOrElse(E const& other) const {return (isValid) ? (mValue) : (other);}
E get(E const {return mValue;}
private:
bool isValid;
T mValue;
};