Привет всем!
Тут наднях захотелось мне скрестить структуры и массивы.
Да так, чтобы визуально было удобно получать доступ к элементам,
и в то же время удобно бы перебирать их
В общем, ситуация такая:
имеется структура однотипных данных:
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 окажется не кратным длине слова,
полетит ли к чертям этот код или все будет ок?
Это очень грязный код, или не очень?
А может есть другой способ перебрать элементы структуры?