我需要设计一个框架来并行计算分而治之算法的结果。 为了使用该框架,用户需要以某种方式指定实现“划分”阶段(从 T 到 T 的函数)、“征服”阶段(从 D 到 D 的函数)以及 T 和 D 本身的过程。
我认为定义两个抽象类会很好,BaseDivide
和 BaseConquer
,它们声明一个纯虚方法 compute
正确的类型:这样我就有了一个类型,它实现了一个定义明确的概念(从框架的角度来看),并通过派生抽象类来包含用户可定义的函数。
我想过使用模板将类型传递给框架,这样用户就不必为了使用框架而实例化它们,所以像这样:
template <typename T, typename D, typename Divide, typename Conquer>
D compute(T arg);
我的问题是我希望分而治之成为 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);
额外的分而治之模板参数的目的是什么?您确定需要它们吗?
关于C++:为模板参数指定基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5888099/