使用接口+模板进行依赖项注入时如何制作内部标头

时间:2019-04-11 14:49:28

标签: c++11 templates dependency-injection interface

在关于C ++中依赖项注入的blog post中,作者解释了一种同时使用模板和接口的混合方法:

ICar.h(公开可见):

#pragma once

struct ICar
{
    virtual void Drive() = 0;
    virtual ~ICar() = default;
};

std::unique_ptr<ICar> MakeV8Car();
std::unique_ptr<ICar> MakeV6Car();

Car.h(内部):

#pragma once
#include "ICar.h"

template <typename TEngine>
class Car : public ICar
{
public:
    void Drive() override
    {
        m_engine.Start();
        // drive
        m_engine.Stop();
    }

private:
    TEngine m_engine;
};

Car.cpp:

#include "Car.h"
#include "V8Engine.h"
#include "V6Engine.h"

std::unique_ptr<ICar> MakeV8Car()
{
    return std::make_unique<Car<V8Engine>>();
}

std::unique_ptr<ICar> MakeV6Car();
{
    return std::make_unique<Car<V6Engine>>();
}

所有这些对我来说都很有意义,除了内部部分。假设我已经从上面创建了一个共享对象。

Car.h在此共享库的上下文中如何私有?

我已经读过answerprivate标头的含义,说明:

Keep your data in MyClassPrivate and distribute MyClass.h.

大概是not分发MyClass_p.h的意思,但是如何避免分发头文件却仍然.so起作用呢?

0 个答案:

没有答案