gpt4 book ai didi

c++ - 我们能把这样的结构变成类型化的类/函数吗?

转载 作者:行者123 更新时间:2023-11-30 04:36:01 25 4
gpt4 key购买 nike

所以结构像

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)

我想将来自type void (differentClass::*)(char*, int)

的不同类的函数传递给它

在一些 simpleRendererGraphElement 中使用该结构,我可以将名为 renderCastedData 的函数订阅到数据charGenerator->AddSubscriberToGeneratedData(RenderCastedDataFunctor(this));我希望有一种方法能够将采用 char*int 的抽象类函数传递给 AddSubscriberToGeneratedData。怎么办?

最佳答案

can we turn simpleRendererGraphElement* into abstract type and make its function name we use in structure (renderCastedData) abstract too?

非常非常好的主意。你应该做这个。通过使类的函数virtual 使类抽象化,然后定义一个实现虚函数的具体类(派生自该抽象类)。那将是一个更好的设计!

其余的似乎已经很好了。您无需执行任何操作,因为您正在执行此操作:

AddSubscriberToGeneratedData(RenderCastedDataFunctor(this));

我想,这里的 this 代表指向具体类实例的指针。如果是这样,那应该可行!


编辑:

I understand how good this Idea is but I do not get how to implement it. that is why I am asking.

好的。这是一个例子:

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 初始化此指针。我认为,您应该阅读虚函数和运行时多态性。那会对你有很大帮助。

关于c++ - 我们能把这样的结构变成类型化的类/函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com