我有一个 C++ 库(包含超过 50 个源文件),它使用大量 STL 例程,主要容器是列表和向量。这导致了巨大的代码膨胀,我想通过在列表和向量上创建包装器来减少代码膨胀。
下面显示的是我对 std:: 的包装器和包装的实例。
template<typename T>
class wlist
{
private:
std::list<T> m_list;
public:
// new iterator set.
typedef typename std::list<T>::iterator iterator;
typedef typename std::list<T>::const_iterator cIterator;
typedef typename std::list<T>::reverse_iterator reverse_iterator;
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 (T& item) { m_list.push_front(item); }
void push_back (T item) { m_list.push_back(item); }
iterator insert(iterator position, T item) {m_list.insert(position,item);}
bool delete_item (T& item);
T back () { return (m_list.empty()) ? NULL : m_list.back();}
T front () { return (m_list.empty()) ? NULL : m_list.front();}
iterator erase(iterator item ) { return m_list.erase(item); }
iterator begin() { return m_list.begin(); }
iterator end() { return m_list.end(); }
reverse_iterator rbegin() { return m_list.rbegin(); }
};
File A:
class label {
public:
int getPosition(void);
setPosition(int x);
private:
wlist<text*> _elementText; // used in place of list<text> _elementText;
}
File B:
class image {
private:
void draw image() {
wlist<label*>::iterator currentElement = _elementText.begin();
((label*)(*currentElement))->getPosition();
currentElement ++;
}
}
我的信念是,通过包装 STL 容器,我将能够减少代码膨胀,但代码大小的减少似乎微不足道,而我包装 STL 的动机是实现大约 20% 的代码减少。
1)通过暴露“包装”迭代器,我是否将STL反过来嵌入到我的客户端代码中,从而否定了我试图做的所有代码保存???
2)我是否选择了正确的分析方法???
修改前尺寸:
$ size libWrap.so
text: 813115
data: 99436
bss: 132704
dec : 1045255
hex: ff307
修改后尺寸:
$ size libWrap.so
text: 806607
data: 98780
bss: 132704
dec : 1038091
hex: fd70b