Ice*_*man 2 c++ abstract-class dependency-injection interface
假设我有以下抽象类,并将其用作C++中的"接口":
class IDemo
{
public:
virtual ~IDemo() {}
virtual void Start() = 0;
};
class MyDemo : IDemo
{
public:
virtual void start()
{
//do stuff
}
};
Run Code Online (Sandbox Code Playgroud)
然后在需要有接口句柄的类中(通过注入具体类):
class Project
{
public:
Project(IDemo demo);
private:
IDemo *_demo;
};
Run Code Online (Sandbox Code Playgroud)
我的目的是通过Project的构造函数分配具体的Demo类.此代码无法编译,因为IDemo无法实例化.有什么建议?提前致谢.
尝试:
Project::Project(IDemo* demo)
: _demo(demo)
{}
Run Code Online (Sandbox Code Playgroud)
但是如果演示对象在项目的生命周期中永远不会改变,那么我更喜欢通过引用传递:
class Project
{
public:
Project(IDemo& d)
: demo(d)
{}
private:
IDemo& demo;
};
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
int main()
{
MyDemo demo;
Project project(demo);
}
Run Code Online (Sandbox Code Playgroud)