Re[2]: Сам код
От: _nn_  
Дата: 05.08.04 14:32
Оценка: 14 (1)
Здравствуйте, Andrew S, Вы писали:

AS>Все в куче, уж не обессудьте.

AS>
AS>#define FLATTEN_STR(buff, name, idx) \
AS>        (buff)[4*(idx)] = (TCHAR)((name##idx & 0xFF000000) >> 24);\
AS>        (buff)[4*(idx) + 1] = (TCHAR)((name##idx & 0xFF0000) >> 16);\
AS>        (buff)[4*(idx) + 2] = (TCHAR)((name##idx & 0xFF00) >> 8);\
AS>        (buff)[4*(idx) + 3] = (TCHAR)(name##idx & 0xFF);

AS>void FlattenStr(LPSTR szBuffer, DWORD n0, DWORD n1, DWORD n2, DWORD n3, DWORD n4, DWORD n5, DWORD n6, DWORD n7)
AS>{
AS>        FLATTEN_STR(szBuffer, n, 0);
AS>        FLATTEN_STR(szBuffer, n, 1);
AS>        FLATTEN_STR(szBuffer, n, 2);
AS>        FLATTEN_STR(szBuffer, n, 3);
AS>        FLATTEN_STR(szBuffer, n, 4);
AS>        FLATTEN_STR(szBuffer, n, 5);
AS>        FLATTEN_STR(szBuffer, n, 6);
AS>        FLATTEN_STR(szBuffer, n, 7);
AS>        szBuffer[64] = _T('\0');
AS>}


AS>template <DWORD n0 = 0, DWORD n1 = 0, DWORD n2 = 0, DWORD n3 = 0, DWORD n4 = 0, DWORD n5 = 0, DWORD n6 = 0, DWORD n7 = 0>
AS>struct CNameId
AS>{
AS>    enum {name_size = 65, m_n0 = n0, m_n1 = n1, m_n2 = n2, m_n3 = n3, m_n4 = n4, m_n5 = n5, m_n6 = n6, m_n7 = n7};
AS>    static void MakeStr(LPTSTR szBuffer)
AS>    {
AS>        FlattenStr(szBuffer, n0,n1,n2,n3,n4,n5,n6,n7);
AS>    }
AS>};


Это можно переделать так :
void FlattenStr(LPSTR szBuffer, const DWORD* pN, DWORD n)
{
    for(DWORD i=0;i<n;i++)
    {
        szBuffer[i*4+0]=HIBYTE(HIWORD(pN[i]));
        szBuffer[i*4+1]=LOBYTE(HIWORD(pN[i]));
        szBuffer[i*4+2]=HIBYTE(LOWORD(pN[i]));
        szBuffer[i*4+3]=LOBYTE(LOWORD(pN[i]));
    }
    szBuffer[i*4] = 0;
}

template<DWORD n0 = 0,
        DWORD n1 = 0,
        DWORD n2 = 0,
        DWORD n3 = 0,
        DWORD n4 = 0,
        DWORD n5 = 0,
        DWORD n6 = 0,
        DWORD n7 = 0>
struct CNameId
{
    enum
    {
        name_size = 65,
        m_n0 = n0,
        m_n1 = n1,
        m_n2 = n2,
        m_n3 = n3,
        m_n4 = n4,
        m_n5 = n5,
        m_n6 = n6,
        m_n7 = n7
    };

    static void MakeStr(LPTSTR szBuffer)
    {
        static const DWORD a[]={n0,n1,n2,n3,n4,n5,n6,n7};
        FlattenStr(szBuffer, a, 7);
    }
};


Таким образом в случае изменения CNameId функцию FlattenStr не будет необходимости менять.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.