我需要设计一个框架来并行地计算除法和征服算法的结果.为了使用框架,用户需要以某种方式指定实现"划分"阶段(从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是派生类型BaseDivide
和BaseConquer
:有一种方法可以在编译时强制执行它吗?另外:你认为我可以通过更清洁的设计获得类似的结果吗?
您可以像这样创建基类:
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)
附加分而治之模板参数的用途是什么?您确定需要它们吗?
归档时间: |
|
查看次数: |
4545 次 |
最近记录: |