调用未知子级的构造函数

发布于 2024-09-14 17:19:08 字数 439 浏览 7 评论 0原文

我想调用构造函数;

class anAbstractClass
{
 public: anAbstractClass(inputdatatype){/*blablabla*/}
};

class aChield : public anAbstactClass
{
/*
...
*/
}

void _engine::initShader(_anAbstractClass** inShader)
{
    *inShader = new /*???*/(inputdata for the construcor)
}

aChield* theChield;
_engine* myEngine = new _engine();
myEngine->initShader(&theChield);

那么,我如何调用 /???/ 处的构造函数? 谢谢您的答案!

I want to call the constructor;

class anAbstractClass
{
 public: anAbstractClass(inputdatatype){/*blablabla*/}
};

class aChield : public anAbstactClass
{
/*
...
*/
}

void _engine::initShader(_anAbstractClass** inShader)
{
    *inShader = new /*???*/(inputdata for the construcor)
}

aChield* theChield;
_engine* myEngine = new _engine();
myEngine->initShader(&theChield);

So, how can I call the constructor at the /???/?
Thx ahead for the answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遗失的美好 2024-09-21 17:19:08

好主意,但不支持在运行时获取指针的确切类型。

在您的 initShader 方法中,inShader 的类型为 anAbstractClass** 并且无法获取它是指向的指针的信息方法调用之前的派生类。

所以你需要改变你的代码,也许你可以使用一些工厂或类似的东西。

Nice idea, but there is no support to get the exact type of a pointer at runtime.

In your initShader method, inShader is of type anAbstractClass** and there is no way to get the information that it was a pointer to pointer to a derived class before the method call.

So you need the change your code, maybe you can use some Factory or something like this.

幽梦紫曦~ 2024-09-21 17:19:08

你不能那样做。当 initShader 只知道基类时,它如何知道要调用哪个子构造函数?

我认为你在这里想要的是一个模板化函数:

template <typename T>
void _engine::initShader(T ** inShader) 
{ 
    *inShader = new T(inputdata for the construcor) 
}

You cannot do that. How is initShader going to know which child constructor to call, when all it knows is the base class?

What I think you want here, is a templated function:

template <typename T>
void _engine::initShader(T ** inShader) 
{ 
    *inShader = new T(inputdata for the construcor) 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文