Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有模板参数的CRTP派生类_C++_Templates_C++17_Crtp - Fatal编程技术网

C++ 带有模板参数的CRTP派生类

C++ 带有模板参数的CRTP派生类,c++,templates,c++17,crtp,C++,Templates,C++17,Crtp,我正在设计一个具有以下结构的API,并在模板CRTP参数领域寻求实用的设计建议。我对C++中的模板比较陌生,所以我的经验不足。 template<typename Derived> struct FitCRTP { ... } template<typename Derived> class FitBase : public FitCRTP<Derived> { ... } template<typename Derived>

我正在设计一个具有以下结构的API,并在模板CRTP参数领域寻求实用的设计建议。我对C++中的模板比较陌生,所以我的经验不足。
template<typename Derived>
struct FitCRTP {
    ...
}

template<typename Derived>
class FitBase : public FitCRTP<Derived> {
    ...
}

template<typename Derived>
class Algebraic : public FitBase<Derived> {
    Algebraic(const Matrix& data) {
        ...
    }
}

template<typename Derived, template<typename> class Alg>
class Geometric : public FitBase<Derived> {
    Geometric(const Matrix& data, Alg<someparam>) {
        ...
    }
}
模板
结构FitCRTP{
...
}
模板
FitBase类:公共FitCRTP{
...
}
模板
类别:公共FitBase{
代数(常数矩阵和数据){
...
}
}
模板
类别:公共装修基地{
几何(常数矩阵和数据,Alg){
...
}
}
代数算法和几何算法代表两类不同的算法,并从每一类中派生出许多相互排斥的算法。几何算法的独特之处在于它们需要一个由代数方法产生的初始猜测——这就是我的问题所在


对于每个几何“子类”,我想创建一个模板参数,允许在保持原始CRTP模式的同时提供代数方法。实现这一点的最佳方式是什么?就需要模板参数而言,我的想法有效吗?

对于CRTP,派生类不需要是模板。您继承了基类型的模板实例化,并将派生类型插入到
derived


class algebratic:public FitBase

someparam
突然从何而来?澄清一下:它并不意味着代表任何实质性的东西——它只是这个问题的一个占位符,因为我不完全确定应该怎么做。CRTP似乎与
几何关系
/
代数关系;毕竟,这是您想要的实际派生类。为什么不直接在类上或构造函数上使用
类Alg
template<template<typename> class Alg, typename someparam>
class Geometric : public FitBase<Geometric<Alg, someparam>> {
    Geometric(const Matrix& data, Alg<someparam>) { }
};