如何将模板参数存储在类似结构的东西中?

Mic*_*ael 8 c++ templates

我有一个模拟代码,我想在编译时进行一些配置:例如,我需要定义维度,数据类型和包含低级操作的类(内联的编译时).

就像是:

template <int DIMENSION, class DATATYPE, class OPERATIONS>
class Simulation{ ... }

template <int DIMENSION, class DATATYPE, class OPERATIONS>
class SimulationNode{ ... }

template <int DIMENSION, class DATATYPE, class OPERATIONS>
class SimulationDataBuffer{ ... }
Run Code Online (Sandbox Code Playgroud)

首先,为每个类编写整个参数集非常烦人.其次,更糟糕的是,可能需要引入一个额外的参数,我必须更改所有类.

是否有像模板参数的结构?

就像是

struct {
  DIMENSION = 3;
  DATATYPE = int;
  OPERATIONS = SimpleOps;
} CONFIG;

template <class CONFIG>
class Simulation{ ... }

template <class CONFIG>
class SimulationNode{ ... }

template <class CONFIG>
class SimulationDataBuffer{ ... }
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 12

当然,创建一个类模板,为您的类型提供别名,为您的类型提供static成员int.

template <int DIMENSION, class DATATYPE, class OPERATIONS>
struct Config
{
    static constexpr int dimension = DIMENSION;
    using datatype = DATATYPE;
    using operations = OPERATIONS;
};
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

template <class CONFIG>
class Simulation{
    void foo() { int a = CONFIG::dimension; }
    typename CONFIG::operations my_operations;
}

using my_config = Config<3, int, SimpleOps>;
Simulation<my_config> my_simulation;
Run Code Online (Sandbox Code Playgroud)