Как определить DumpElements?
От: dma_k  
Дата: 23.01.05 21:55
Оценка:
Использую с своей программе список:
CArray <AbstractRectFigure*, AbstractRectFigure*> m_figures;

Класс AbstractRectFigure наследуется от CObject.
Хочу написать для свего списка процедуру для дампа. Но, к сожалению, следующая конструкция не компилируется:

template<>
void AFXAPI DumpElements<AbstractRectFigure*>(CDumpContext& dc, const AbstractRectFigure** pFigures, int nCount)
{
    pFigures;
}

Ошибка:

E:\WORK\ChartEditor\Figures.cpp(32) : error C2912: explicit specialization; 'void __stdcall DumpElements(class CDumpContext &,const class AbstractRectFigure ** ,int)' is not a function template
E:\Dmitry\WORK\ChartEditor\Figures.cpp(31) : see declaration of 'DumpElements'

Компилируется только вариант:

template<>
void AFXAPI DumpElements<AbstractRectFigure>(CDumpContext& dc, const AbstractRectFigure* pFigures, int nCount)
{
    pFigures;
}

но такой шаблон никогда не вызывается, потому что он, по-моему, совсем не тот, что нужно. Я искал в Google, но такое впечатление, что никто никогда не использовал DumpElements, кроме самой Microsoft.
Re: Как определить DumpElements?
От: Patalog Россия  
Дата: 24.01.05 06:54
Оценка:
Здравствуйте, dma_k, Вы писали:

хъ

template<>
void AFXAPI DumpElements<AbstractRectFigure*>(CDumpContext& dc, AbstractRectFigure* const* pFigures, int nCount)
{
    pFigures;
}
Почетный кавалер ордена Совка.
Пояснение
От: Patalog Россия  
Дата: 24.01.05 07:02
Оценка:
Здравствуйте, dma_k, Вы писали:

хъ

Шаблонная в-я объявлена как
template<class TYPE>
void AFXAPI DumpElements(CDumpContext& dc, const TYPE* pElements, INT_PTR nCount)
т.е. принимает указатель на константный <тип>. Поскольку в твоем случае <тип> сам по себе указатель (AbstractRectFigure*),
то ф-я ожидает константный указатель на указатель на AbstractRectFigure. А ты пытаешься дать указатель-на-указатель-на константный объект, т.е. перегружешь ф-ю.
Почетный кавалер ордена Совка.
Re: Пояснение
От: Аноним  
Дата: 12.02.05 08:18
Оценка:
Спасибо, Patalog! Благодарность моя не имеет границ! Честно говоря, настолько глубоко вложенные указатели меня путают, а когда ещё и const нужно в правильном месте поставить, понимаешь, что C++ -- это для виртуозов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.