gpt4 book ai didi

c++ - 如何在控制反转中创建类构造函数所需的对象?

转载 作者:太空狗 更新时间:2023-10-29 22:52:31 25 4
gpt4 key购买 nike

我正在使用 TDD 在 C++ 中编程,这建议在创建对象时使用控制反转(在创建某个类的对象时,将构造的对象传递给它的构造函数)。这很好,但是如何创建构造函数所需的对象?

现在,我正在使用一个工厂(我可以很容易地为我的单元测试更改它),它返回一个指向创建对象的 shared_ptr。这是正确的方法,还是有更好的方法?

非常简单的例子演示了我在做什么:

#include <iostream>

struct A {
virtual ~A() { }
virtual void foo() = 0;
};

struct B : A {
virtual ~B() { }
virtual void foo() { std::cout<<"B::foo()"<<std::endl; }
};

struct C {
C( A *a ) : a(a) { }
void DoSomething() { a->foo(); }

A *a;
};

int main() {
C c( new B );

c.DoSomething();
}

反对:

#include <iostream>

struct A {
virtual ~A() { }
virtual void foo() = 0;
};

struct B : A {
virtual ~B() { }
virtual void foo() { std::cout<<"B::foo()"<<std::endl; }
};

struct C {
C() : a() { }
void DoSomething() { a.foo(); }

B a;
};

int main() {
C c; // the object of type B is constructed in the constructor

c.DoSomething();
}

编辑1

This link解释了 java 的 IoC,但您可能知道,在 java 中您可以执行如下操作:

class B
{
};
class A
{
public:
A( B b )
...
};

...
A objA( new B ); // this doesn't work in c++
...

最佳答案

使用构建器设计模式。 Builder 和 Factory 是非常相似的设计模式,但具体而言,Builder 通过首先构建其组件来创建由多个组件组成的对象。

这就是您在国际奥委会所做的事情。您构建组件,然后将它们作为参数传递给对象。

当我创建这个模型(4 次!)时,构建器存储参数对象的构建器,以及标量信息的字典顺序表示。您还可以允许 vector 和 map 。

在 IOC 系统中,您首先需要的是配置文件。通常(但不总是)通过运行时动态库加载将组件加载到您的系统中。

关于c++ - 如何在控制反转中创建类构造函数所需的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143701/

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