在关于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
在此共享库的上下文中如何私有?
我已经读过answer中private
标头的含义,说明:
Keep your data in MyClassPrivate and distribute MyClass.h.
大概是not
分发MyClass_p.h
的意思,但是如何避免分发头文件却仍然.so
起作用呢?