struct как array - это грязный код?
От: Fedor.P  
Дата: 11.10.04 12:09
Оценка:
Привет всем!
Тут наднях захотелось мне скрестить структуры и массивы.
Да так, чтобы визуально было удобно получать доступ к элементам,
и в то же время удобно бы перебирать их

В общем, ситуация такая:

имеется структура однотипных данных:


struct _STRINGS {
    CString Name;
    CString Post;
    CString Email;
    ....
} m_Strings;


Как удобно!
Захотел получить имя? пожалуйста — m_Strings.Name;
Захотел емеил? тоже пожалуйста! — m_Strings.Email;

Но вот понадобилось мне сериализировать все мои стринги, т.е. все строки собрать в одну строку.
Можно конечно писать код, в котором я буду по порядку сохранять все строки: m_Strings.Name, m_Strings.Post, m_Strings.Email и т.д. ...
Только вот, при восстановлении этих строк нельзя будет путать их порядок.
А если я вдруг забуду какое-нить поле прописать? чего тогда начнеться....

Так вот я решил сделать по-другому — перебрать все поля структуры в цикле,
как обычно поступают с массивами.
Напрмер, вот так мне удалось инициализировать все объекты CString моей структуры:

CString* pStr = (CString*)&m_Strings;

for (int i = 0; i < sizeof (m_Strings)/sizeof(CString); i++)
{
    (pStr + i)->Format(_T("string #%i"), i);
}


Одно только смущает — как быть с выравнивание?
Если вдруг размер CString окажется не кратным длине слова,
полетит ли к чертям этот код или все будет ок?

Это очень грязный код, или не очень?
А может есть другой способ перебрать элементы структуры?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.