所以结构像
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/