luc*_*v67 3 c++ templates constructor struct
为了使我的问题更清楚,首先我向您展示我的模板化结构,用于根据维度State
描述状态空间的状态向量:
template<unsigned int Dimension>
struct State;
// Specialization : for dimension 1
template<>
struct State<1>
{
State() = default;
State(double x) : x{ x } {}
double x{};
};
// Specialization : for dimension 2
template<>
struct State<2>
{
State() = default;
State(double x, double dx) : x{ x }, dx{ dx } {}
double x{};
double dx{};
};
// Specialization : for dimension 3
template<>
struct State<3>
{
State() = default;
State(double x, double dx, double ddx) : x{ x }, dx{ dx }, ddx{ ddx } {}
double x{};
double dx{};
double ddx{};
};
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以构建一个state
具有 3 个维度的变量:
1 维:auto state = State<1>(2.0);
2个维度:auto state = State<2>(2.0, 4.7);
3个维度:auto state = State<3>(2.0, 4.7, 5.9);
但我想知道:
我可以定义变量状态而不提供 V 形中的维度值,而只能通过编译从我在构造函数中提供的值的数量中推断出它吗?例如 :
// What i would like to be able to do
auto state = State{2.0, 4.7}; // FAILED ( 2 values provided, so I would like the compilator to deduce it's the constructor of State<2> )
// Instead of doing
auto state = State<2>{2.0, 4.7};
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
只需添加一个扣除指南:
template<class... Ts>
State(Ts...) -> State<sizeof...(Ts)>;
Run Code Online (Sandbox Code Playgroud)
在 C++17 之前,典型的解决方案是引入辅助函数:
template<class... Ts>
State<sizeof...(Ts)> makeState(Ts... values) {
return State<sizeof...(Ts)>(values...);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43 次 |
最近记录: |