我们可以将这种结构转换为类型类/函数吗?

所以在结构上如此
struct RenderCastedDataFunctor
{
    simpleRendererGraphElement* obj_;

    RenderCastedDataFunctor(simpleRendererGraphElement* obj)
        : obj_(obj) { }

    void operator()(char* castedChar, int castedCharLength)
    {
        obj_->renderCastedData(castedChar, castedCharLength);
    }
};
我们可以将simpleRendererGraphElement *转换为抽象类型,并将其在结构(
renderCastedData
)中使用的函数名称也用于抽象吗? 所以我在
charGenerator
类中有一个函数
template <typename Function>
void AddSubscriberToGeneratedData(Function f)
我想从不同的classes4ѭ类中传递它的功能 在一些simpleRendererGraphElement中使用该结构,我可以使用名为
renderCastedData
的函数订阅
charGenerator->AddSubscriberToGeneratedData(RenderCastedDataFunctor(this));
我希望有一种方法能够传递抽象类函数,它将
char*
int
传递给
AddSubscriberToGeneratedData
。怎么办这样的事情?     
已邀请:
  我们可以转   simpleRendererGraphElement * into   抽象类型并使其功能   我们在结构中使用的名称   (renderCastedData)抽象呢? 非常好主意。你应该做这个。通过使它的函数
virtual
使类抽象化,然后定义一个实现虚函数的具体类(从这个抽象类派生)。那将是一个更好的设计! 其余的似乎已经很好了。你没有做任何事情,因为你这样做:
AddSubscriberToGeneratedData(RenderCastedDataFunctor(this));
我想,这里
this
代表指向具体类实例的指针。如果是这样,那应该工作! 编辑:   我明白这个想法有多好   我不知道如何实现它。那   这就是我要问的原因。 好的。这是一个例子:
class AbstractGraphElement
{
  public:
    virtual void RenderCastedData(char* castedChar, int castedCharLength) = 0;
};
这是你的抽象类,
RenderCastedData
是一个纯虚函数。现在你需要定义一个必须定义
RenderCastedData
函数的具体类。所以这里是:
class SimpleGraphElement : public AbstractGraphElement
{
  public:
    virtual void RenderCastedData(char* castedChar, int castedCharLength)
    {
        //function body - define it yourself
    }
};
完成! 现在你需要做的就是这个。修改
RenderCastedDataFunctor
如下:
struct RenderCastedDataFunctor
{
    AbstractGraphElement* m_graphElement;

    RenderCastedDataFunctor(AbstractGraphElement* graphElement)
        : m_graphElement(graphElement) { }

    void operator()(char* castedChar, int castedCharLength)
    {
        m_graphElement->RenderCastedData(castedChar, castedCharLength);
    }
};
然后添加订阅者,
AbstractGraphElement *pGraphElement = new SimpleGraphElement();
AddSubscriberToGeneratedData(RenderCastedDataFunctor(pGraphElement));
我认为它给了你一些想法,对吧?重要的一点是:使用
AbstractGraphElement
类型的指针,但用
SimpleGraphElement
初始化该指针。我想,你应该阅读有关虚函数和运行时多态的内容。那会对你有所帮助。     

要回复问题请先登录注册