【发布时间】:2011-02-12 00:15:34
【问题描述】:
我有一个 C++ 库(包含 50 多个源文件),它使用大量 STL 例程,主容器为 list 和 vector。这导致了巨大的代码膨胀,我想通过创建另一个本质上是包装器的库来减少代码膨胀
在list 和vector 上。
我基本上需要一个围绕std::list 的包装器,它适用于任何类型的列表容器。
下面显示的是我的列表包装类。
template<typename T>
class wlist
{
private:
std::list<T> m_list;
public:
wlist();
typedef std::list<void*>::iterator Iterator;
typedef std::list<void*>::const_iterator CIterator;
unsigned int size () { return m_list.size(); }
bool empty () { return m_list.empty(); }
void pop_back () { m_list.pop_back(); }
void pop_front () { m_list.pop_front(); }
void push_front (const T& item) { m_list.push_front(item); }
void push_back (const T& item) { m_list.push_back(item); }
bool delete_item (void* item);
T& back () { return (m_list.empty()) ? NULL : m_list.back();}
T& front () { return (m_list.empty()) ? NULL : m_list.front();}
Iterator erase() { return m_list.erase(); }
Iterator begin() { return (Iterator) m_list.begin(); }
Iterator end() { return (Iterator) m_list.end(); }
};
文件1.h:
class label{
public:
int getPosition(void);
setPosition(int x);
private:
wlist<text> _elementText; // used in place of list<text> _elementText;
}
文件2.h:
class image {
private:
void draw image() {
//Used instead of list<label*>::iterator currentElement = _elementText.begin();
wlist<label*>::iterator currentElement = _elementText.begin();
currentElement->getPosition(); // Here is the problem.
currentElement ++;
}
}
使用以下错误消息调用 getPosition() 炸弹:
error: request for member `getPosition' in `*(¤tElement)->std::_List_iterator<_Tp>::operator-> [with _Tp = void*]()', which is of non-class type `void*'
类型转换 getPosition() 到 label 类型不起作用。此外,我的迭代器类型为 void*。
【问题讨论】: