我有这两个header
文件,List.h
和ListTraits.h
List.h继承自ListTraits.h
,它意味着是一个模板类实现
的std::list
。现在一切都很好,但insert()
方法实现。我不得不在List.h
中使用ListTraits.h
,而std::list insert
方法返回
和iterator
相比,insert
的ListTraits.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);