显式模板实例化和组合爆炸?

时间:2018-03-05 20:39:57

标签: c++ templates design-patterns

我正在编写一个策略模式类,如下所示:

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()”

0 个答案:

没有答案