C++:为模板参数指定基类

aka*_*ppa 6 c++ templates

我需要设计一个框架来并行地计算除法和征服算法的结果.为了使用框架,用户需要以某种方式指定实现"划分"阶段(从T到T的函数),"征服"阶段(从D到D的函数)和T和D本身的过程.

我认为定义两个抽象类会很好,BaseDivide并且它会使用正确的类型BaseConquer声明一个纯虚方法compute:这样我就有了一个实现明确定义概念的类型(从框架的角度来看)通过派生抽象类包含用户可定义的函数.

我曾经想过使用模板将类型传递给框架,因此用户不必为了使用框架而实例化它们,所以像这样:

template <typename T, typename D, typename Divide, typename Conquer> 
D compute(T arg);
Run Code Online (Sandbox Code Playgroud)

我的问题是我希望Divide and Conquer是派生类型BaseDivideBaseConquer:有一种方法可以在编译时强制执行它吗?另外:你认为我可以通过更清洁的设计获得类似的结果吗?

Gun*_*iez 4

您可以像这样创建基类:

struct BaseDivide {
    enum EnumDiv { derivedFromBaseDivide = true };
}

template <typename T, typename D, typename Divide, typename Conquer> 
    static_assert(D::derivedFromBaseDivide);
    D compute(T arg);
Run Code Online (Sandbox Code Playgroud)

附加分而治之模板参数的用途是什么?您确定需要它们吗?