У меня есть библиотека 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(); }
};
Файл A:
class label {
public:
int getPosition(void);
setPosition(int x);
private:
wlist<text*> _elementText; // used in place of list<text> _elementText;
}
Файл 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