[英]CRTP derived class with template template parameter
我正在設計一個具有以下結構的 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>) {
...
}
}
代數和幾何代表兩類不同的算法,並且從每一類派生出許多互斥的算法。 幾何算法的獨特之處在於它們需要由一種代數方法產生的初始猜測——這就是我的問題所在。
對於每個幾何“子類”,我想創建一個模板參數,允許在保持原始 CRTP 模式的同時提供代數方法。 執行此操作的最佳方法是什么? 就需要模板模板參數而言,我的想法是否有效?
使用 CRTP,派生類不需要是模板。 您繼承基類型的模板實例化,派生類型插入Derived
:
class Algebraic : public FitBase<Algebraic> {
Algebraic(const Matrix& data) { }
};
所以,如果你的派生類恰好有一個模板參數,而你想引用它自己,只需插入模板參數。 模板模板參數的工作方式相同。
template<template<typename> class Alg, typename someparam>
class Geometric : public FitBase<Geometric<Alg, someparam>> {
Geometric(const Matrix& data, Alg<someparam>) { }
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.