renderCastedData
- нестатическая функция-член.Его тип
void (simpleRendererGraphElement::*)(char*, int)
Чтобы вызвать его, вам нужно иметь экземпляр simpleRendererGraphElement
для параметра this
.Есть много решений этой проблемы.Один из вариантов - сделать Add
шаблоном функции, который принимает все, что может быть вызвано с параметром char*
и int
:
template <typename Function>
void Add(Function f)
, тогда вы можете написать объект функции для переносаВызов:
struct RenderCastedDataFunctor
{
simpleRendererGraphElement* obj_;
RenderCastedDataFunctor(simpleRendererGraphElement* obj)
: obj_(obj) { }
void operator()(char* castedChar, int castedCharLength)
{
obj_->renderCastedData(castedChar, castedCharLength);
}
};
и из вашей функции Init
вы можете вызывать
charGenerator->Add(RenderCastedDataFunctor(this));
(библиотеки bind
и function
из Boost, C ++ TR1 и C ++0x предоставляет обобщенную форму этого шаблона, позволяя вам связывать аргументы с любой вызываемой сущностью и сохранять эти связанные вызываемые сущности для последующего использования. Этот конкретный подход здесь представляет собой просто упрощенную версию, которая должна работать без каких-либо дополнительных или, возможно, не поддерживаемых библиотек.)