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

标签 c++ templates

我需要设计一个框架来并行计算分而治之算法的结果。 为了使用该框架,用户需要以某种方式指定实现“划分”阶段(从 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/

相关文章:

c++ - 如何保证一个函数在一个线程内不返回就不会再次进入?

c++ - 在 QLabel 上将 12digit double 或 int 显示为 full 而不是 3.23223e+9

javascript - 如何在 Handlebar 模板中找到数组长度?

c++ - 继承 std::stack 会导致 clang 出错,但适用于 gcc

c++ - 特定数据类型的模板类

c++ - 内存泄漏,指向文字的指针

C++ - 从类外部更改私有(private)成员

c++ - 模板参数推导

c++ - 执行小插入/移位的并行算法

c++ - 如何获取模板化 WTL 类对象 C++ 的地址