C++ 从C+返回NULL+;样板

C++ 从C+返回NULL+;样板,c++,class,templates,null,C++,Class,Templates,Null,我必须创建一个模板函数来搜索映射变量中的元素。如果元素存在,函数必须返回它。否则它必须返回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 {

我必须创建一个模板函数来搜索映射变量中的元素。如果元素存在,函数必须返回它。否则它必须返回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字典::研究(K键){
//地图元素;
if(elements.find(key)!=elements.end()){
返回元素。查找(键)->秒;
}否则{
返回NULL;
}
因为返回类型是E,所以返回NULL总是会给我一个错误。我如何才能做到这一点?或者我必须以不同的方式构造我的函数


这是一个学校作业,我必须返回NULL,没有其他选择。如果可以,我个人会做不同的事情。

此函数的设计不正确。
NULL
完全可能与类型
E
不兼容。例如,假设
E
是一个结构,或
std::string
等等

这是一份学校作业,我必须返回
NULL
,没有其他选择


<>你的作业分配不正确,或者你误解了它的要求。你有可能返回一个指针给<代码> e < /c> > /p> ,而不是返回指针,你可以考虑返回一个像Boo::可选的,即一个被设置为包含一个有效的对象或者处于无效状态的类型。hat在某种程度上模仿了指针,但更加明确

下面只是为了说明原理,实现一定可以优化

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;
};
模板类可选{
公众:
可选(E):
isValid(true),
M值(e)
{}
可选():isValid(false),mValue(){}
bool isDefined()常量{return isValid;}
E getOrElse(E const&other)const{return(isValid)?(mValue):(other);}
E get(E const{return mValue;}
私人:
bool是有效的;
T值;
};

如果
NULL
与元素的类型不兼容,则它可能无法工作。问题是什么?返回指向E:
template*E dictionary::research(K键)的指针{
@mah,指针是我猜作业想要的。@BrianCain我编辑了我的问题,抱歉我不太清楚。你关于类型不兼容的说法是正确的,这就是我在这里提问的原因。作业没有指定任何关于指针的内容,但我会尝试一下。