Невеличкий хак
May. 8th, 2008 05:11 pmПисав програму. В одному з модулів використовував std::list<T>. Обізвав його через typdef, скажімо, P, і, надалі використовував цей P для отримання ітератора (P::iterator) чи викликів begin(), end() та push_back().
Коли вже все працювало, встала необхідність додати до P поле, скажімо, int f. Дуже не хотілось змінювати код - бо багато. Тоді я поступив дуже просто.
Було:
typdef std::list<T> P;
Стало:
struct P {
std::list<T> something;
int f;
typdef std::list<T>::iterator iterator;
iterator begin() { return something.begin(); };
iterator end() { return something.end(); };
void push_back(const T & t) { something.push_back(t); };
int GetF() const { return f; };
};
Ото такий проксі :)
Програма досі думає що працює зі списком, а насправді - це вже крутіша структура :)
PS: доки писав - замислився: якого біса я відкрито не пронаслідував std::list<T>? От баран...ште аж
Коли вже все працювало, встала необхідність додати до P поле, скажімо, int f. Дуже не хотілось змінювати код - бо багато. Тоді я поступив дуже просто.
Було:
typdef std::list<T> P;
Стало:
struct P {
std::list<T> something;
int f;
typdef std::list<T>::iterator iterator;
iterator begin() { return something.begin(); };
iterator end() { return something.end(); };
void push_back(const T & t) { something.push_back(t); };
int GetF() const { return f; };
};
Ото такий проксі :)
Програма досі думає що працює зі списком, а насправді - це вже крутіша структура :)
PS: доки писав - замислився: якого біса я відкрито не пронаслідував std::list<T>? От баран...ште аж