Re[4]: Траблы с CArray
От: beldmit  
Дата: 19.12.02 11:10
Оценка:
Здравствуйте, kmn, Вы писали:

kmn>Здравствуйте, beldmit, Вы писали:


B>>Если Вы правы, то что с этим предполагается делать? В принципе этот плагин я могу счесть частью основной функциональности и не совать в dll, но нет ли более правильного способа?


kmn>не обращаться к массивам непосредственно


kmn>
kmn>template <class TYPE, class ARG_TYPE = const TYPE&>
kmn>class CArrayV
kmn>{
kmn>public:
kmn>    virtual int Add(ARG_TYPE v)
kmn>       {
kmn>            array.Add(v)
kmn>       }
kmn>     
kmn>    virtual int RemoveAll()
kmn>       {
kmn>            m_array.RemoveAll();
kmn>       }

kmn>
kmn>protected:
kmn>     CArray<TYPE, ARG_TYPE> m_array;
kmn>};

kmn>
kmn>template <class TYPE, class ARG_TYPE = const TYPE&>
kmn>class CArrayEx
kmn>{
kmn>public:
kmn>    int Add(ARG_TYPE v)
kmn>       {
kmn>            array.Add(v)
kmn>       }
kmn>     
kmn>    int RemoveAll()
kmn>       {
kmn>            m_array.RemoveAll();
kmn>       }

kmn>
kmn>protected:
kmn>     CArray<TYPE, ARG_TYPE> m_array;
kmn>};
kmn>


kmn>

kmn>
kmn>// EXE

kmn>CArrayV <int, int> arrayV;
kmn>CArrayEx <int, int> arrayEx;

kmn>MyDllFunctionEX(&arrayEx);
kmn>MyDllFunctionV(&arrayV);

kmn>
kmn>arrayEx.RemoveAll(); // Здесь будет бабах
kmn>arrayV.RemoveAll();  // OK

kmn>// DLL

kmn>void MyDllFunctionEX(CArrayEx<int, int> *array)
kmn>{
kmn>   array->Add(128);
kmn>   array->Add(256);
kmn>}

kmn>void MyDllFunctionV(CArrayEx<int, int> *array)
kmn>{
kmn>   array->Add(128);
kmn>   array->Add(256);
kmn>}

kmn>



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