从C ++模板返回NULL

时间:2014-04-14 14:47:08

标签: c++ class templates null

我必须创建一个模板函数来搜索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,没有其他选择。如果可以,我会亲自做些不同的事。

2 个答案:

答案 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;
};