我需要设计一个框架,以并行方式计算分治算法的结果。为了使用该框架,用户需要以某种方式指定实现“分”阶段(从T到T的函数)、“治”阶段(从D到D的函数)以及T和D本身的过程。
我认为定义两个抽象类BaseDivide和BaseConquer会很好,它们声明了一个带有正确类型的纯虚方法compute:这样我就有了一个实现了明确定义概念(从框架的角度来看)的类型,并通过抽象类的派生包含了用户可定义的函数。
我考虑使用模板将类型传递给框架,这样用户就不必实例化它们才能使用框架,因此可以做出以下操作:
我认为定义两个抽象类BaseDivide和BaseConquer会很好,它们声明了一个带有正确类型的纯虚方法compute:这样我就有了一个实现了明确定义概念(从框架的角度来看)的类型,并通过抽象类的派生包含了用户可定义的函数。
我考虑使用模板将类型传递给框架,这样用户就不必实例化它们才能使用框架,因此可以做出以下操作:
template <typename T, typename D, typename Divide, typename Conquer>
D compute(T arg);
我的问题是我希望“分治算法”成为BaseDivide
和BaseConquer
的派生类型:有没有一种方法可以在编译时强制执行它?另外,您认为我能用更清晰的设计达到类似的结果吗?