更具体地说,假设我有一个带参数的类模板A和B,我想有一个编译器错误(当模板被实例化)如果B未从A派生
template<class A, class B>
class Foo
{
// static_assert(B is derived from A)
};
Run Code Online (Sandbox Code Playgroud) 我需要设计一个框架来并行地计算除法和征服算法的结果.为了使用框架,用户需要以某种方式指定实现"划分"阶段(从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:有一种方法可以在编译时强制执行它吗?另外:你认为我可以通过更清洁的设计获得类似的结果吗?