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

如何在控制反转中创建类构造函数所需的对象? 我使用C++编程,它建议在创建对象时使用控制反转(当创建某类的对象时,将构造的对象传递给它的构造函数)。这很好,但是如何创建构造函数所需的对象呢,c++,unit-testing,tdd,inversion-of-control,C++,Unit Testing,Tdd,Inversion Of Control,现在,我正在使用一个工厂(我可以很容易地为我的单元测试更改它),它返回一个指向所创建对象的共享\u ptr。 这是正确的方法,还是有更好的方法 非常简单的示例演示了我正在做的事情: #include <iostream> struct A { virtual ~A() { } virtual void foo() = 0; }; struct B : A { virtual ~B() { } virtual void foo() { std::co

现在,我正在使用一个工厂(我可以很容易地为我的单元测试更改它),它返回一个指向所创建对象的共享\u 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();
}

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

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

当我创建这个模型时(4次!),构建器存储参数对象的构建器和标量信息的字典表示。还可以允许使用向量和贴图


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

任何指向控制反转+1概念的链接都会起作用。我不需要完全的运行时灵活性——我只想简化单元测试(并允许使用mock)。你能告诉我你的建筑商回来了吗?指针?对象(这需要复制构造函数)?共享指针?还有别的吗?生成器是类,你可以用它们来创建你的对象。我的有一个getObject()方法,它是公共的,还有一个createObject()方法,它是私有的和虚拟的,由getObject()调用,以确保只创建一次,而多个get。createObject()应返回指针,但getObject返回共享的\u ptr。createObject()返回允许协方差的指针。我的构建器和ObjectLoader一起工作,ObjectLoader将参数名绑定到它所需的其他对象的构建器。
#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();
}
class B
{
};
class A
{
  public:
    A( B b )
...
};

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