我正在编写一个策略模式类,如下所示:
template<typename Worker, typename Location, typename Behavior>
class Driver {
public:
Location location;
Behavior behavior;
Worker* worker;
Driver();
void start();
};
在cpp文件中,我有这个:
template <typename Worker, typename Exchange, typename Behavior>
Driver<Worker, Exchange, Behavior>::Driver(){
worker = new Worker();
};
template <typename Worker, typename Location, typename Behavior>
void Driver<Worker, Location, Behavior>::start(){
;
};
template class Driver<WorkerStruct1, LocationStruct1, BehaviorStruct1>;
这是问题所在,我有很多WorkerStruct和LocationStruct以及BehaviorStruct。我使用政策模式的原因是为了避免“组合爆炸”。
但是,如果我必须实例化所有模板,我将在cpp文件的底部有一大堆实例化行。比如说,我对这三个组件中的每一个都有7个,那么我有7 * 7 * 7 = 343行。
这是政策模式的假设吗?
有些评论问我为什么要实例化模板。我不知道出了什么问题,但如果我没有实例化,我会收到编译错误: “undefined reference to Driver&lt; ....&gt; :: Driver()”