对作为模板参数给出的结构体中的值进行部分特化

Partially specialize with respect to values in struct given as template parameter

本文关键字:行部 结构体 参数      更新时间:2023-10-16

我有一个结构体,我用它作为模板参数来配置一些类:

template <int _DIM, class _TYPE>
struct CONFIG{
    static constexpr int DIM = _DIM;
    using TYPE = _TYPE;
};

然后我需要部分专门化一个类。我目前是这样做的:

实例化模板的行:

template <class CONFIG> instantiate(){
    Calculator<CONFIG::DIM, typename CONFIG::NODE> calc;
}

要特殊化的模板:

template <class TYPE>
struct Calculator<2, TYPE>{
    static void fct(TYPE t){
    }
};

是否有一种方法可以直接实例化和专门化计算器与类型配置的模板参数?

像这样更改实例化:

template <class Config> instantiate(){
    Calculator<Config> calc;
}

然后像这样专门化:

template <class T>
struct Calculator<CONFIG<2, T>>{
    static void fct(T t){
    }
};

像模板形参CONFIG和结构体CONFIG那样重载名称通常不是一个好主意。