c++模板方法的返回类型



我有这两个header文件,List.hListTraits.hList.h继承自ListTraits.h,它意味着是一个模板类实现

std::list。现在一切都很好,但insert()方法实现。我不得不在List.h中使用ListTraits.h,而std::list insert方法返回

iterator相比,insertListTraits.h方法签名是奇怪的。这些是类:

List.h

template <typename T> 
class List: public ListTraits<T> {
protected:
std::list<T> list;
public:
unsigned int size() {return 0;}
ListTraits<T>& insert(const T& item) {     //<----------I think I should be returning iterator, but I have to return something of ListTraits<T> and that doesnt make sense
typename std::list<T>::iterator it;
list.insert(list.end(),  item);
return it;
}
const T* getCurrentElement() const {

}
...

和ListTraits.h

#pragma once
//------------ Declarations for List traits used in Test1 in main.cpp
template <typename T> class ListTraits
{
public:
virtual unsigned int size() = 0;
virtual ListTraits& insert(const T& item) = 0; //<-----------------------INSERT METHOD HERE---#######
virtual void print() = 0;
};
//------------ Declarations for List traits used in Test2 in main.cpp
template <typename T> class ListTraitsExtended
{
public:
virtual const T* getCurrentElement() const = 0;
virtual void advance() = 0;
virtual void rewind() = 0;
};

你能帮我完成insert方法,使它成为标准库list.insert(it, value)方法的模板版吗?

变化

return it;
}

return *this;
}

这允许一种称为"方法链接"的技术。

list.insert(a).insert(b).insert(c);