gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:58 26 4
gpt4 key购买 nike

我需要设计一个框架来并行计算分而治之算法的结果。为了使用该框架,用户需要以某种方式指定实现“划分”阶段(从 T 到 T 的函数)、“征服”阶段(从 D 到 D 的函数)以及 T 和 D 本身的过程。

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

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

template <typename T, typename D, typename Divide, typename Conquer> 
D compute(T arg);

我的问题是我希望分而治之成为 BaseDivideBaseConquer 的派生类型:有没有办法在编译时强制执行它?另外:您认为我可以通过更简洁的设计获得类似的结果吗?

最佳答案

您可以像这样创建基类:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com