簡體   English   中英

帶有模板模板參數的CRTP派生類

[英]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>) { }
};

https://godbolt.org/z/qjvvK8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM