gpt4 book ai didi

c++ - 构造函数注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:21 25 4
gpt4 key购买 nike

我知道代码丢失了(有人会给出负数)。但是我只想知道这种情况你是怎么解决构造函数注入(inject)的?

class PresenterFactory
{
public:
template<class TModel>
AbstractPresenter<TModel>*
GetFor(AbstractView<TModel> * view)
{
return new PresenterA(view, new FakeNavigator());
}
};

class ViewA : public AbstractView<ModelA>
{
static PresenterFactory factory;
public:
ViewA(AbstractPresenter<ModelA> *presenter = factory.GetFor<ModelA>(this)) :
AbstractView<ModelA> (presenter)
{
}

// this one is also not working
// invalid use of ‘class ViewA’
// ViewA()
// {
// this->ViewA(factory.GetFor<ModelA> (this));
// }
};

最佳答案

为什么不使用两个构造函数?

// constructor with one argument
ViewA(AbstractPresenter<ModelA> *presenter) : AbstractView<ModelA> (presenter)
{
}

// constructor without arguments
ViewA() : AbstractView<ModelA>(factory.GetFor<ModelA>(this))
{
}

顺便说一下,this 指针只在非静态成员函数中有效。它不应在基类的初始化列表中使用。在此构造函数之前调用基类构造函数和类成员构造函数。实际上,您已将指向未构造对象的指针传递给另一个构造函数。如果那些其他构造函数访问任何成员或调用成员函数,结果将是未定义的。在所有构造完成之前,您不应该使用 this 指针。

关于c++ - 构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574512/

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